Java lang unsupportedoperationexception reflective setaccessible true disabled

Spring Boot: How to Deal With That Nasty UnsupportedOperationException You’re Seeing

You’re probably here because you recently restarted Spring Boot and found something like this unappetizing stacktrace in your console:

java.lang.UnsupportedOperationException: Reflective setAccessible(true) disabled at io.netty.util.internal.ReflectionUtil.trySetAccessible(ReflectionUtil.java:31) at io.netty.util.internal.PlatformDependent0$4.run(PlatformDependent0.java:238) at java.base/java.security.AccessController.doPrivileged(Native Method) at io.netty.util.internal.PlatformDependent0.(PlatformDependent0.java:232) at io.netty.util.internal.PlatformDependent.isAndroid(PlatformDependent.java:293) at io.netty.util.internal.PlatformDependent.(PlatformDependent.java:92) at io.netty.util.ConstantPool.(ConstantPool.java:32) at io.netty.channel.ChannelOption$1.(ChannelOption.java:36) at io.netty.channel.ChannelOption.(ChannelOption.java:36) at reactor.netty.tcp.TcpClient.(TcpClient.java:677) at reactor.netty.http.client.HttpClient.(HttpClient.java:1388) at org.springframework.http.client.reactive.ReactorClientHttpConnector.(ReactorClientHttpConnector.java:56) at org.springframework.web.reactive.function.client.DefaultWebClientBuilder.getOrInitConnector(DefaultWebClientBuilder.java:282) at org.springframework.web.reactive.function.client.DefaultWebClientBuilder.build(DefaultWebClientBuilder.java:260) at us.careydevelopment.web.registration.service.RegistrationUserService.(RegistrationUserService.java:33) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:204) at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:117) at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:310) at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:295) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1356) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1203) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1307) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1227) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1420) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:593) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:897) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:879) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:405) at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) at us.careydevelopment.web.registration.Registration.main(Registration.java:10) 03:27:38.120 [main] DEBUG i.n.util.internal.PlatformDependent0 - java.nio.Bits.unaligned: available, true 03:27:38.121 [main] DEBUG i.n.util.internal.PlatformDependent0 - jdk.internal.misc.Unsafe.allocateUninitializedArray(int): unavailable java.lang.IllegalAccessException: class io.netty.util.internal.PlatformDependent0$6 cannot access class jdk.internal.misc.Unsafe (in module java.base) because module java.base does not export jdk.internal.misc to unnamed module @2e2f720 at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:361) at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:591) at java.base/java.lang.reflect.Method.invoke(Method.java:558) at io.netty.util.internal.PlatformDependent0$6.run(PlatformDependent0.java:352) at java.base/java.security.AccessController.doPrivileged(Native Method) at io.netty.util.internal.PlatformDependent0.(PlatformDependent0.java:343) at io.netty.util.internal.PlatformDependent.isAndroid(PlatformDependent.java:293) 

And that stacktrace goes on.

Now you’re pulling your hair out wondering how to fix it.

So you went to your favorite search engine to look for ideas and that’s what led you here.

Читайте также:  Python string template to string

Well, I can’t guarantee you that what I’m about to tell you will fix it in your situation. But I can say that it worked for me.

Let me share what I discovered.

TL;DR: Upgrade to a Later Version of Spring Boot

Alas, sometimes the simplest solutions are the easiest to overlook.

And in my case it was the simplest solution that worked.

I just updated Spring Boot to a later version.

In my POM file, I previously had this:

  org.springframework.boot spring-boot-starter-parent 2.3.8.RELEASE 

That’s the 2.3.8.RELEASE version of the Spring Boot starter parent.

All I did was change that to this:

  org.springframework.boot spring-boot-starter-parent 2.5.3 

After making that change, I restarted Spring Boot. Then the problem disappeared like a politician’s promises after election day.

If that doesn’t work for you, then that means you’re going to have to keep searching. Sorry. 🙁

More Info

So what the heck is going on here?

In my case, the problem appeared once I included the Spring WebFlux depdency:

  org.springframework.boot spring-boot-starter-webflux 

Without that, the problem didn’t show up.

And that makes sense because the underlying complaint comes from Netty.

If you’re unfamiliar with Netty (or Reactor Netty), it’s the default server used by WebFlux. It’s an asynchronous framework design to work with reactive programming.

So there’s another possible solution: you can eliminate WebFlux if you can live without it.

And you shouldn’t have to go that route anyway. So I don’t view that as a viable fix.

Suppressing Fire

Some folks like to add VM arguments to suppress the exception stacktrace.

But that’s not really a solution. It’s just a way to eliminate a nuisance.

Читайте также:  Java stack trace native method

That’s ignoring a problem rather than dealing with it.

I tried it anyway. Just for kicks and giggles.

I added the following VM arguments:

--add-opens java.base/jdk.internal.misc=ALL-UNNAMED -Dio.netty.tryReflectionSetAccessible=true --add-opens java.base/java.lang=ALL-UNNAMED

And when I did that and restarted Spring Boot, I got this in the console instead of that stacktrace you see above:

WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by io.netty.util.internal.ReflectionUtil (file:/C:/Users/carey/.m2/repository/io/netty/netty-common/4.1.58.Final/netty-common-4.1.58.Final.jar) to constructor java.nio.DirectByteBuffer(long,int) WARNING: Please consider reporting this to the maintainers of io.netty.util.internal.ReflectionUtil WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations WARNING: All illegal access operations will be denied in a future release

That’s better. But Spring still complained.

Eventually, I opted for the upgrade solution I suggested above. It worked for me.

I hope it works for you as well.

Wrapping It Up

Sorry if this didn’t fix your problem.

If that’s the case, rest assured you will eventually slay this Goliath. Because you’re cool like that.

Источник

Оцените статью