quarkus: RestEasy reactive with smallrye metrics throws NoSuchMethodException

Describe the bug

Running quarkus app in native mode with rest easy reactive and smallrye metrics. Endpoint when invoked fails with following error

2021-09-17 09:38:08,156 ERROR [io.aut.eng.ser.exc.UnknownExceptionMapper] (executor-thread-0) Unexpected error processing request: java.lang.RuntimeException: java.lang.NoSuchMethodException: org.acme.ScriptsResource.create_scripts(javax.ws.rs.core.HttpHeaders, java.lang.String, java.lang.String, java.util.List, org.acme.ScriptsModelInput)
	at org.jboss.resteasy.reactive.server.spi.ResteasyReactiveResourceInfo.getMethod(ResteasyReactiveResourceInfo.java:70)
	at org.jboss.resteasy.reactive.server.spi.ResteasyReactiveResourceInfo.getResourceMethod(ResteasyReactiveResourceInfo.java:101)
	at org.jboss.resteasy.reactive.server.injection.ContextProducers_ProducerMethod_resourceInfo_be7f5503a87442251cde9fbc1d406fb350a529f0_ClientProxy.getResourceMethod(ContextProducers_ProducerMethod_resourceInfo_be7f5503a87442251cde9fbc1d406fb350a529f0_ClientProxy.zig:89)
	at io.smallrye.metrics.jaxrs.JaxRsMetricsFilter.filter(JaxRsMetricsFilter.java:57)
	at org.jboss.resteasy.reactive.server.handlers.ResourceRequestFilterHandler.handle(ResourceRequestFilterHandler.java:40)
	at org.jboss.resteasy.reactive.server.handlers.ResourceRequestFilterHandler.handle(ResourceRequestFilterHandler.java:8)
	at org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext.run(AbstractResteasyReactiveContext.java:141)
	at io.quarkus.vertx.core.runtime.VertxCoreRecorder$13.runWith(VertxCoreRecorder.java:543)
	at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2449)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1478)
	at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:29)
	at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:29)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.lang.Thread.run(Thread.java:829)
	at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:567)
	at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:192)
Caused by: java.lang.NoSuchMethodException: org.acme.ScriptsResource.create_scripts(javax.ws.rs.core.HttpHeaders, java.lang.String, java.lang.String, java.util.List, org.acme.ScriptsModelInput)
	at java.lang.Class.getMethod(DynamicHub.java:1120)
	at org.jboss.resteasy.reactive.server.spi.ResteasyReactiveResourceInfo.getMethod(ResteasyReactiveResourceInfo.java:65)
	... 15 more

Expected behavior

No errors are thrown and metrics for JAX-RS are collected

Actual behavior

Error is thrown and service returns 500

How to Reproduce?

No response

Output of uname -a or ver

Darwin MacBook-Pro.local 20.6.0 Darwin Kernel Version 20.6.0: Wed Jun 23 00:26:31 PDT 2021; root:xnu-7195.141.2~5/RELEASE_X86_64 x86_64

Output of java -version

openjdk version “11.0.11” 2021-04-20

GraalVM version (if different from Java)

GraalVM 21.2.0 Java 11 CE (Java Version 11.0.12+6-jvmci-21.2-b08)

Quarkus version or git rev

2.2.1

Build tool (ie. output of mvnw --version or gradlew --version)

maven 3.6.3

Additional information

https://groups.google.com/d/msgid/quarkus-dev/A1E3BF4D-ED44-499A-80C3-816577C3464C%40gmail.com

About this issue

  • Original URL
  • State: closed
  • Created 3 years ago
  • Comments: 23 (22 by maintainers)

Most upvoted comments

In meantime this change made it to work mswiderski@f3661c7

not sure though it is what it should be but looking at what org.jboss.resteasy.reactive.server.spi.ResteasyReactiveResourceInfo.getMethod does (looking up methods via reflection) I guess having these classes registered for it makes sense.

This is why I’m curious to see if Micrometer hits the issue, too. The smallrye metrics extension uses more reflection than micrometer does… but this may be a case where resources need to be handled differently…

is that like another dependency?

nope. baked in. It is enabled if any MP Metrics API usage is detected at build time.