2 years ago

#43129

test-img

Rajesh Kumar

Getting StackOverFlow error when Instantiating WebClient bean from Spring boot 2.2.1

I am getting stackOverFlow exception when instantiating Webflux WebClient bean

@Bean(name = "xxxWebClient")
  public WebClient xxxWebClient() {
    return WebClient.builder()
            .baseUrl(serviceBaseUrl)
            .defaultHeader(ACCEPT, HEADER_VALUE)
            .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
            .build();
  }

I added the below dependency to the build.gradle

implementation 'org.springframework.boot:spring-boot-starter-webflux'

This the stack trace of the error

Caused by: java.lang.StackOverflowError
    at jdk.internal.loader.URLClassPath.getResource(URLClassPath.java:313) ~[?:?]
    at java.net.URLClassLoader$1.run(URLClassLoader.java:455) ~[?:?]
    at java.net.URLClassLoader$1.run(URLClassLoader.java:452) ~[?:?]
    at java.security.AccessController.doPrivileged(Native Method) ~[?:?]
    at java.net.URLClassLoader.findClass(URLClassLoader.java:451) ~[?:?]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:588) ~[?:?]
    at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:92) ~[xxx.jar:?]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[?:?]
    at java.lang.ClassLoader.defineClass1(Native Method) ~[?:?]
    at java.lang.ClassLoader.defineClass(ClassLoader.java:1016) ~[?:?]
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174) ~[?:?]
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:550) ~[?:?]
    at java.net.URLClassLoader$1.run(URLClassLoader.java:458) ~[?:?]
    at java.net.URLClassLoader$1.run(URLClassLoader.java:452) ~[?:?]
    at java.security.AccessController.doPrivileged(Native Method) ~[?:?]
    at java.net.URLClassLoader.findClass(URLClassLoader.java:451) ~[?:?]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:588) ~[?:?]
    at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:92) ~[xxx.jar:?]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[?:?]
    at java.lang.ClassLoader.defineClass1(Native Method) ~[?:?]
    at java.lang.ClassLoader.defineClass(ClassLoader.java:1016) ~[?:?]
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174) ~[?:?]
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:550) ~[?:?]
    at java.net.URLClassLoader$1.run(URLClassLoader.java:458) ~[?:?]
    at java.net.URLClassLoader$1.run(URLClassLoader.java:452) ~[?:?]
    at java.security.AccessController.doPrivileged(Native Method) ~[?:?]
    at java.net.URLClassLoader.findClass(URLClassLoader.java:451) ~[?:?]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:588) ~[?:?]
    at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:92) ~[xxx.jar:?]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[?:?]
    at java.lang.ClassLoader.defineClass1(Native Method) ~[?:?]
    at java.lang.ClassLoader.defineClass(ClassLoader.java:1016) ~[?:?]
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174) ~[?:?]
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:550) ~[?:?]
    at java.net.URLClassLoader$1.run(URLClassLoader.java:458) ~[?:?]
    at java.net.URLClassLoader$1.run(URLClassLoader.java:452) ~[?:?]
    at java.security.AccessController.doPrivileged(Native Method) ~[?:?]
    at java.net.URLClassLoader.findClass(URLClassLoader.java:451) ~[?:?]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:588) ~[?:?]
    at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:92) ~[xxx.jar:?]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[?:?]
    at java.lang.ClassLoader.defineClass1(Native Method) ~[?:?]
    at java.lang.ClassLoader.defineClass(ClassLoader.java:1016) ~[?:?]
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174) ~[?:?]
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:550) ~[?:?]
    at java.net.URLClassLoader$1.run(URLClassLoader.java:458) ~[?:?]
    at java.net.URLClassLoader$1.run(URLClassLoader.java:452) ~[?:?]
    at java.security.AccessController.doPrivileged(Native Method) ~[?:?]
    at java.net.URLClassLoader.findClass(URLClassLoader.java:451) ~[?:?]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:588) ~[?:?]
    at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:92) ~[xxx.jar:?]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[?:?]
    at java.lang.ClassLoader.defineClass1(Native Method) ~[?:?]
    at java.lang.ClassLoader.defineClass(ClassLoader.java:1016) ~[?:?]
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174) ~[?:?]
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:550) ~[?:?]
    at java.net.URLClassLoader$1.run(URLClassLoader.java:458) ~[?:?]
    at java.net.URLClassLoader$1.run(URLClassLoader.java:452) ~[?:?]
    at java.security.AccessController.doPrivileged(Native Method) ~[?:?]
    at java.net.URLClassLoader.findClass(URLClassLoader.java:451) ~[?:?]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:588) ~[?:?]
    at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:92) ~[xxx.jar:?]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[?:?]
    at java.lang.ClassLoader.defineClass1(Native Method) ~[?:?]
    at java.lang.ClassLoader.defineClass(ClassLoader.java:1016) ~[?:?]
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174) ~[?:?]
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:550) ~[?:?]
    at java.net.URLClassLoader$1.run(URLClassLoader.java:458) ~[?:?]
    at java.net.URLClassLoader$1.run(URLClassLoader.java:452) ~[?:?]
    at java.security.AccessController.doPrivileged(Native Method) ~[?:?]
    at java.net.URLClassLoader.findClass(URLClassLoader.java:451) ~[?:?]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:588) ~[?:?]
    at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:92) ~[xxx.jar:?]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[?:?]
    at io.netty.util.ConstantPool.<init>(ConstantPool.java:32) ~[netty-common-4.1.43.Final.jar!/:4.1.43.Final]
    at io.netty.channel.ChannelOption$1.<init>(ChannelOption.java:35) ~[netty-transport-4.1.43.Final.jar!/:4.1.43.Final]
    at io.netty.channel.ChannelOption.<clinit>(ChannelOption.java:35) ~[netty-transport-4.1.43.Final.jar!/:4.1.43.Final]
    at reactor.netty.tcp.TcpClient.<clinit>(TcpClient.java:617) ~[reactor-netty-0.9.1.RELEASE.jar!/:0.9.1.RELEASE]
    at reactor.netty.http.client.HttpClient.<clinit>(HttpClient.java:940) ~[reactor-netty-0.9.1.RELEASE.jar!/:0.9.1.RELEASE]
    at org.springframework.http.client.reactive.ReactorClientHttpConnector.<init>(ReactorClientHttpConnector.java:57) ~[spring-web-5.2.1.RELEASE.jar!/:5.2.1.RELEASE]
    at org.springframework.web.reactive.function.client.DefaultWebClientBuilder.getOrInitConnector(DefaultWebClientBuilder.java:249) ~[spring-webflux-5.2.1.RELEASE.jar!/:5.2.1.RELEASE]
    at org.springframework.web.reactive.function.client.DefaultWebClientBuilder.build(DefaultWebClientBuilder.java:232) ~[spring-webflux-5.2.1.RELEASE.jar!/:5.2.1.RELEASE]
    at com.loblaw.cnc.fulfillment.config.CoreConfig.xxxWebClient(Config.java:113) ~[xxx.jar!/:?]

As you can see from the stack trace it is trying to call LaunchedURLClassLoader.loadClass repeatedly. But I am not able find the LaunchedURLClassLoader in the project at all.

We run our application in Google Cloud. And the pods restarts every time it encounters this error and after a few restarts the application is able to start successfully. So not sure how we are not getting this error after a few restarts.

Any Idea on what could be the issue?

Details of version

Java - 11
Spring Boot Version - 2.2.1

spring-webflux

stack-overflow

0 Answers

Your Answer

Accepted video resources