flips icon indicating copy to clipboard operation
flips copied to clipboard

Can not create bean flipAnnotationsStore

Open mxhc opened this issue 5 years ago • 14 comments

I used flips web dependency and @Import(FlipWebContextConfiguration.class) Spring boot 2.1.2 It always throws this exception: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flipAnnotationsStore': Invocation of init method failed; nested exception is java.lang.NullPointerException at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:139) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:419) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1737) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:576) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:846) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:863) ~[spring-context-5.1.4.RELEASE.jar:5.1.4.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546) ~[spring-context-5.1.4.RELEASE.jar:5.1.4.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142) ~[spring-boot-2.1.2.RELEASE.jar:2.1.2.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775) [spring-boot-2.1.2.RELEASE.jar:2.1.2.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.1.2.RELEASE.jar:2.1.2.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:316) [spring-boot-2.1.2.RELEASE.jar:2.1.2.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260) [spring-boot-2.1.2.RELEASE.jar:2.1.2.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248) [spring-boot-2.1.2.RELEASE.jar:2.1.2.RELEASE] at com.smort.RestDemoApplication.main(RestDemoApplication.java:14) [classes/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_161] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_161] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_161] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_161] at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) [spring-boot-devtools-2.1.2.RELEASE.jar:2.1.2.RELEASE] Caused by: java.lang.NullPointerException: null at org.flips.store.FlipAnnotationsStore.getAllMethodsWithConditionEvaluator(FlipAnnotationsStore.java:76) ~[flips-core-1.0.1.jar:na] at org.flips.store.FlipAnnotationsStore.lambda$buildFlipAnnotationsStore$0(FlipAnnotationsStore.java:53) ~[flips-core-1.0.1.jar:na] at java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:267) ~[na:1.8.0_161] at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948) ~[na:1.8.0_161] at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) ~[na:1.8.0_161] at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) ~[na:1.8.0_161] at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) ~[na:1.8.0_161] at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:1.8.0_161] at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499) ~[na:1.8.0_161] at org.flips.store.FlipAnnotationsStore.buildFlipAnnotationsStore(FlipAnnotationsStore.java:54) ~[flips-core-1.0.1.jar:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_161] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_161] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_161] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_161] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:363) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:307) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:136) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE] ... 23 common frames omitted

Process finished with exit code 0

mxhc avatar Jun 13 '19 13:06 mxhc

Thank you for informing, we will take a look. In the meantime if it is possible pls share the code, if you can and do take a look at https://github.com/SarthakMakhija/flips-samples?files=1 for samples in spring boot 2

SarthakMakhija avatar Jun 13 '19 13:06 SarthakMakhija

thank you for your fast reply. I followed the samples from the url you supplied. In one sample project I created just to test the feature, it works just fine. In my main project, as soon as I put the @Import(FlipWebContextConfiguration.class), I get this exception. I have just one @FlipOff annotation on one controller method. Thats all. You want me to share my pom with you? Or something else?

package com.smort;

import org.flips.describe.config.FlipWebContextConfiguration; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Import; import org.springframework.context.annotation.PropertySource;

@Import(FlipWebContextConfiguration.class) @SpringBootApplication @PropertySource("classpath:messages.properties") public class RestDemoApplication { public static void main(String[] args) { SpringApplication.run(RestDemoApplication.class, args); }

}

mxhc avatar Jun 13 '19 13:06 mxhc

Yeah, pom.xml should be fine.

Thank you, will get back soon.

SarthakMakhija avatar Jun 13 '19 13:06 SarthakMakhija

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> 2.1.2.RELEASE <relativePath/> <groupId>com.smort</groupId> <artifactId>rest-demo</artifactId> 0.0.1-SNAPSHOT jar

<name>rest-demo</name>
<description>Spring 5 REST Demo</description>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <org.mapstruct.version>1.2.0.Final</org.mapstruct.version>
    <springfox-swagger2.version>2.9.2</springfox-swagger2.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct</artifactId>
        <version>${org.mapstruct.version}</version>
    </dependency>


    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>


    <!--swagger-->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>${springfox-swagger2.version}</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>${springfox-swagger2.version}</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-bean-validators</artifactId>
        <version>2.9.2</version>
    </dependency>
    <!--end of swagger-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <!--security test-->
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-test</artifactId>
        <scope>test</scope>
    </dependency>
    <!--end of security test-->

    <!--apache commons file upload-->
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.3.3</version>
    </dependency>


    <dependency>
        <groupId>com.github.feature-flip</groupId>
        <artifactId>flips-web</artifactId>
        <version>1.0.1</version>
    </dependency>
</dependencies>


<build>
    <plugins>

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>versions-maven-plugin</artifactId>
            <version>2.7</version>
            <configuration>
                <generateBackupPoms>false</generateBackupPoms>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <addResources>true</addResources>
            </configuration>
        </plugin>

        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>3.0.0-M3</version>
            <configuration>

            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <configuration>
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                        <version>${lombok.version}</version>
                    </path>
                    <path>
                        <groupId>org.mapstruct</groupId>
                        <artifactId>mapstruct-processor</artifactId>
                        <version>${org.mapstruct.version}</version>
                    </path>
                </annotationProcessorPaths>
                <compilerArgs>
                    <compilerArg>
                        -Amapstruct.defaultComponentModel=spring
                    </compilerArg>
                </compilerArgs>
            </configuration>
        </plugin>

    </plugins>
</build>

mxhc avatar Jun 13 '19 13:06 mxhc

I tried it in yet another project, and same problem. Added a flips web dependency, flipped some controller methods off, added a controller advice and imported FlipWebContextConfiguration. Same error. The project was made with spring boot 1.4.7

Created new project from https://start.spring.io, added a few dependencies and made a simple controller with 2 methods, and it works fine. Why it doesn't work in my project? What am I doing wrong?

always on this line if (!this.isPackageExcludedFromScan(clazz.getPackage().getName())) { in public class FlipAnnotationsStore

Also tried it on this project: https://github.com/mxhc/sfg-pet-clinic

you can test it. Just add flips web dependency and import FlipWebContextConfiguration. It crashes every time.

Hope you will have time to check it out.

mxhc avatar Jun 14 '19 12:06 mxhc

Give me some time, I will definitely get back ..

SarthakMakhija avatar Jun 15 '19 04:06 SarthakMakhija

nothing?

mxhc avatar Oct 15 '19 09:10 mxhc

Hi, I am also having this issues and keen to find out if there has been a solution?

Thanks, Aaron

amcguinness056 avatar Mar 11 '20 14:03 amcguinness056

Any update on this? I was looking into using this project, but getting the same NPE as mentioned above.

tchevganov-aires avatar Jul 30 '20 16:07 tchevganov-aires

Any updates on this? Having a similar issue on this line:

at org.flips.store.FlipAnnotationsStore.buildFlipAnnotationsStore(FlipAnnotationsStore.java:54)

.collect(toMap(MethodConditionEvaluator::getMethod, MethodConditionEvaluator::getFlipConditionEvaluator));

Seems to not like Request Scoped Beans

@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)

chrispwright avatar Sep 10 '20 16:09 chrispwright

Hey @chrispwright

Apologies, haven't been able to find time for this. Has been in the backlog for long but just keeps getting pushed.

Apologies again ..

SarthakMakhija avatar Sep 10 '20 16:09 SarthakMakhija

Hello @tchevganov-aires

Apologies, haven't been able to find time for this. Has been in the backlog for long but just keeps getting pushed.

Apologies again ..

SarthakMakhija avatar Sep 10 '20 16:09 SarthakMakhija

Hello @amcguinness056

Apologies, haven't been able to find time for this. Has been in the backlog for long but just keeps getting pushed.

Apologies again ..

SarthakMakhija avatar Sep 10 '20 16:09 SarthakMakhija

Hello @mxhc

Apologies, haven't been able to find time for this. Has been in the backlog for long but just keeps getting pushed.

Apologies again ..

SarthakMakhija avatar Sep 10 '20 16:09 SarthakMakhija