ring-clojure / ring

Clojure HTTP server abstraction
MIT License
3.77k stars 520 forks source link

IllegalArgumentException in jetty after compilation to GraalVM native image #396

Closed piranha closed 2 years ago

piranha commented 4 years ago

After compilation to native image I've got this exception:

java.lang.IllegalArgumentException: No matching field found: getDispatcherType for class org.eclipse.jetty.server.Request
    at clojure.lang.Reflector.getInstanceField(Reflector.java:397)
    at clojure.lang.Reflector.invokeNoArgInstanceMember(Reflector.java:440)
    at ring.adapter.jetty$proxy_handler$fn__1987.invoke(jetty.clj:25)
    at ring.adapter.jetty.proxy$org.eclipse.jetty.server.handler.AbstractHandler$ff19274a.handle(Unknown Source)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
    at org.eclipse.jetty.server.Server.handle(Server.java:500)
    at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:386)
    at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:562)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:378)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:270)
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
    at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938)
    at java.lang.Thread.run(Thread.java:834)
    at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:479)
    at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:193)

Didn't try digging deeper yet, just wanted to document it.

FieryCod commented 2 years ago

This is already fixed.

From GraalVM CE 21.2.0 the --initialize-at-build-time flag without specifying the namespaces that should be initialized at build time is deprecated and the GraalVM 22.0.0 will fail on this.

@weavejester This is why clj-easy distributes the configuration here.