0

My app use spring boot 2.5.12, Gradle 7.3.3.

More logs here

2022-09-14 11:52:05.893 1179 [background-preinit] INFO  Version - HV000001: Hibernate Validator 6.2.3.Final
2022-09-14 11:52:05.972 1258 [main] INFO   - Starting app using Java 1.8.0_342 on 
2022-09-14 11:52:05.975 1261 [main] INFO   - The following 1 profile is active: "develop"
2022-09-14 11:52:07.126 2412 [main] INFO  RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2022-09-14 11:52:07.242 2528 [main] INFO  RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 111 ms. Found 15 JPA repository interfaces.
2022-09-14 11:52:07.517 2803 [main] INFO  PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'webSocketConfig' of type [cip.v32.services.service.investigation.modules.messaging.websocket.WebSocketConfig$$EnhancerBySpringCGLIB$$7dd4fc38] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2022-09-14 11:52:07.773 3059 [main] INFO  TomcatWebServer - Tomcat initialized with port(s): 8081 (http)
2022-09-14 11:52:07.779 3065 [main] INFO  Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8081"]
2022-09-14 11:52:07.780 3066 [main] INFO  StandardService - Starting service [Tomcat]
2022-09-14 11:52:07.780 3066 [main] INFO  StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.60]
2022-09-14 11:52:07.855 3141 [main] INFO  [/api/v1] - Initializing Spring embedded WebApplicationContext
2022-09-14 11:52:07.855 3141 [main] INFO  ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1839 ms
2022-09-14 11:52:07.998 3284 [main] ERROR ContainerBase - A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbeddedContext[/api/v1]]
    at java.util.concurrent.FutureTask.report(FutureTask.java:122) ~[?:1.8.0_342]
    at java.util.concurrent.FutureTask.get(FutureTask.java:192) 
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbeddedContext[/api/v1]]

Caused by: java.lang.NullPointerException
    at org.apache.tomcat.websocket.server.WsServerContainer.<init>(WsServerContainer.java:109) ~[tomcat-embed-websocket-9.0.60.jar:9.0.60]

    

I'm getting NPE by running application. I tried everything from stack overflow, but I can not succed. My build gradle has spring-boot-web, tomcat everthing which is needed.

build.gradle

This is my whole build gradle file. I've tried a few different approach to run it, but without succes. Maybe tomcat version is not comatible with some libraries?

    plugins {
    id 'groovy'
    id 'org.springframework.boot' version '2.7.3'
    id 'io.spring.dependency-management' version '1.0.13.RELEASE'
    id 'java'
}

dependencies {
       // Third party dependencies
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.retry:spring-retry'
implementation 'org.springframework.boot:spring-boot-starter-websocket'

// Third party dependencies
implementation 'com.auth0:java-jwt:3.8.3'                                               // Contains vulnerabilities
implementation 'com.codahale.metrics:metrics-core:3.0.2'
implementation 'com.google.code.findbugs:jsr305:3.0.0'
implementation 'com.google.code.gson:gson:2.8.5'                                        // Contains vulnerabilities
implementation 'com.googlecode.java-ipv6:java-ipv6:0.17'
implementation 'com.itextpdf:itextpdf:5.5.13.1'                                         // Contains vulnerabilities
implementation 'com.jayway.jsonpath:json-path:2.4.0'                                    // Contains vulnerabilities
implementation 'com.squareup.okhttp:okhttp:2.7.5'
implementation 'commons-beanutils:commons-beanutils:1.9.4'
implementation 'commons-net:commons-net:3.8.0'                                          // Contains vulnerabilities
implementation 'de.grundid.opendatalab:geojson-jackson:1.14'
implementation 'eu.bitwalker:UserAgentUtils:1.20'                                       // Contains vulnerabilities
implementation 'io.springfox:springfox-boot-starter:3.0.0'
implementation 'io.springfox:springfox-swagger-ui:3.0.0'
implementation 'javax.ws.rs:javax.ws.rs-api:2.1.1'                                      // Contains vulnerabilities
implementation 'org.apache.commons:commons-collections4:4.4'                            // Contains vulnerabilities
implementation 'org.apache.commons:commons-compress:1.21'
implementation 'org.apache.commons:commons-csv:1.9.0'
implementation 'org.apache.commons:commons-lang3:3.12.0'
implementation 'org.elasticsearch.client:elasticsearch-rest-high-level-client:7.12.1'   // Contains vulnerabilities
implementation 'org.jetbrains:annotations:13.0'
implementation 'org.openjdk.jmh:jmh-core:1.25'


annotationProcessor 'org.projectlombok:lombok:1.18.10'
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
compileOnly 'org.projectlombok:lombok:1.18.10'


// Test dependencies
testImplementation 'com.h2database:h2'
testImplementation 'commons-io:commons-io:1.3.2'
testImplementation 'org.openjdk.jmh:jmh-generator-annprocess:1.25'
testImplementation 'org.spockframework:spock-core:2.0-groovy-3.0'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
testImplementation 'org.testcontainers:junit-jupiter:1.15.0'
testImplementation 'org.testcontainers:postgresql:1.15.0'
testImplementation 'org.testcontainers:testcontainers:1.15.0'

testAnnotationProcessor 'org.projectlombok:lombok:1.18.10'
testCompileOnly 'org.projectlombok:lombok:1.18.10'
}

configurations.implementation {
    exclude group: 'ch.qos.logback', module: 'logback-classic'
    exclude group: 'ch.qos.logback', module: 'logback-core'
    exclude group: 'org.apache.logging.log4j', module: 'log4j-to-slf4j'
}

}

MainClass

@Data
@SpringBootApplication
@EnableRetry
@ConfigurationProperties(prefix = "spring.db")
public class CipMiddleware {
    

    public static void main(String[] args) {
        SpringApplication.run(CipMiddleware.class, args);
    }

}
  • There is too little information here. Show your spring boot class, show your build file. There is also more logging, include that as well. – M. Deinum Sep 14 '22 at 09:31
  • Please provide a [mcve] and see [ask] – Olaf Kock Sep 14 '22 at 09:39
  • Don't mix configuration properties and `@SpringBootApplication` use a dedicated object. Stop mixing jars from different version of a framework (Spring 5.2.4, 5.2.5 and the one that Spring Boot brings in). Ditch `spring-aspects` include `spring-boot-starter-aop` instead. Ditch `spring-jdbc` use `spring-boot-starter-jdbc` instead. Ditch `spring-websocket` use `spring-boot-starter-websocket` instead. Remove the version from `spring-boot-dependencies` (or remove that all together as that is already done by the spring depenency plugin). – M. Deinum Sep 14 '22 at 09:54
  • Also the fat that you use a `spring.db` prefix makes me wonder what you are manually configuring that Sprign Boot already does, finally you haven't included the full `build.gradle` so not sure if there is more. – M. Deinum Sep 14 '22 at 09:58
  • Hey guys, thanks for response. I updated question with needed information and code. – Bartosz Bujnicki Sep 14 '22 at 10:01
  • Do you really need the `spring-aspects` library? Are you using full blown AspectJ to run your AOP? If not you don't really need it. – M. Deinum Sep 14 '22 at 10:02

1 Answers1

0

Don't mix configuration properties and @SpringBootApplication use a dedicated object.


@Data
@ConfigurationProperties(prefix = "spring.db")
public class MyProperties { ... }

@SpringBootApplication
@EnableRetry
@EnableConfigurationProperties(MyProperties.class)
public class CipMiddleware { ... }

Stop mixing jars from different version of a framework (in this case Spring 5.2.4, 5.2.5 and the one that Spring Boot brings in 5.3.18).

Remove version from spring-aspects so you get a compatible version.
Remove spring-jdbc already included with spring-boot-starter-jpa.
Replace spring-websocket with spring-boot-starter-websocket.

Remove spring-security-core already including in spring-boot-starter-security.
Remove hibernate-core/jakarta-persistence already part of spring-boot-starter-data-jpa Remove the validation-api already part of spring-boot-starter-validation

Version of configuration-processesor dependency pulls in old versions of jars (remove the the version).

Remove the version from spring-boot-dependencies (or remove that all together as that is already done by the spring depenency plugin).

Spring Boot Test already pullsin junit, junit-jupiter and assertj.

Lombok version is managed by Spring Boot

dependencies {
  
    // Third party dependencies   
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-security'
    implementation 'org.springframework.boot:spring-boot-starter-validation'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-websocket'    
    implementation 'org.springframework.retry:spring-retry'
    implementation 'org.springframework:spring-aspects'

    // Third party dependencies
    implementation 'com.auth0:java-jwt:3.8.3'                                               // Contains vulnerabilities
    implementation 'com.codahale.metrics:metrics-core:3.0.2'
    implementation 'com.google.code.findbugs:jsr305:3.0.0'
    implementation 'com.google.code.gson:gson'                                        // Contains vulnerabilities
    implementation 'com.googlecode.java-ipv6:java-ipv6:0.17'
    implementation 'com.itextpdf:itextpdf:5.5.13.1'                                         // Contains vulnerabilities
    implementation 'com.jayway.jsonpath:json-path:2.4.0'                                    // Contains vulnerabilities
    implementation 'com.squareup.okhttp:okhttp:2.7.5'
    implementation 'commons-beanutils:commons-beanutils:1.9.4'
    implementation 'commons-net:commons-net:3.8.0'                                          // Contains vulnerabilities
    implementation 'de.grundid.opendatalab:geojson-jackson:1.14'
    implementation 'eu.bitwalker:UserAgentUtils:1.20'                                       // Contains vulnerabilities
    implementation 'io.springfox:springfox-boot-starter:3.0.0'
    implementation 'io.springfox:springfox-swagger-ui:3.0.0'
    
    implementation 'javax.ws.rs:javax.ws.rs-api:2.1.1'                                      // Contains vulnerabilities
    implementation 'org.apache.commons:commons-collections4:4.4'                            // Contains vulnerabilities
    implementation 'org.apache.commons:commons-compress:1.21'
    implementation 'org.apache.commons:commons-csv:1.9.0'
    implementation 'org.apache.commons:commons-lang3:3.12.0'
    implementation 'org.elasticsearch.client:elasticsearch-rest-high-level-client:7.12.1'   // Contains vulnerabilities
// Contains vulnerabilities
    implementation 'org.jetbrains:annotations:13.0'
    implementation 'org.openjdk.jmh:jmh-core:1.25'

    annotationProcessor 'org.projectlombok:lombok'
    annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'

    compileOnly 'org.projectlombok:lombok'

    // External resource files
    externalResourceFiles 'cip.v32.resources.dev:aaa-data:1.0.0:cells@zip'
    externalResourceFiles 'cip.v32.resources.dev:geo-data:1.0.0:geohash-precision@csv'
    externalResourceFiles 'cip.v32.resources.dev:ip-data:1.0.0:country.ip@csv'

    // Test dependencies
    testImplementation 'com.h2database:h2'
    testImplementation 'commons-io:commons-io:1.3.2'    
    testImplementation 'org.openjdk.jmh:jmh-generator-annprocess:1.25'
    testImplementation 'org.spockframework:spock-core:2.0-groovy-3.0'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.springframework.security:spring-security-test'
    testImplementation 'org.testcontainers:junit-jupiter:1.15.0'
    testImplementation 'org.testcontainers:postgresql:1.15.0'
    testImplementation 'org.testcontainers:testcontainers:1.15.0'

    testAnnotationProcessor 'org.projectlombok:lombok'
    testCompileOnly 'org.projectlombok:lombok'


}

You are also using io.springfox which has some issues with newer versions of Spring Boot (see Springfox 3.0.0 is not working with Spring Boot 2.6.0 on what to include/exclude and configure).

Finally why are you building a war instead of a jar if you are going to use the embedded container anyway? I would suggest to use the jar plugin instead of the war plugin.

M. Deinum
  • 115,695
  • 22
  • 220
  • 224
  • Thank you for your response. You are right, I removed 'war' plugin and I stay w jar. I also folllowed your approach with removing version of spring e.t.c RIght now I have same version of jars in spring framework. But I still have the same issue ;/. I – Bartosz Bujnicki Sep 14 '22 at 12:56
  • Then please, as earlier requested, add your full build file to your question. – M. Deinum Sep 14 '22 at 13:18
  • Ok, I added my build.gradle file to question – Bartosz Bujnicki Sep 14 '22 at 14:03
  • Your dependencies are even more of a mess. Remove the validation dependencies, hibernate ones. – M. Deinum Sep 15 '22 at 05:09
  • Ok, Followed your post I changed my build.gradle (updated question), I removed unnecessary dependencies, but I still get the exceptions. What could be the cause of it? Some uncompitible version of libraries? – Bartosz Bujnicki Sep 15 '22 at 14:13
  • I also mentioned something about springfox, did you follow the configuration for that post? Or added a newer version of SpringFox? – M. Deinum Sep 16 '22 at 06:52
  • Yes, I fixed the SpringFof by adding configuration – Bartosz Bujnicki Sep 16 '22 at 07:17