ring-clojure/ring

ring and ring-jetty-adapter 1.12.1 fails to work with simple example from wiki

Closed this issue · 2 comments

Hello,

I am working to use ring-jetty-adapter 1.12.1 on Java 21 https://github.com/ring-clojure/ring/wiki/Getting-Started

deps.edn

{:paths ["src"]
 :deps {org.clojure/clojure {:mvn/version "1.11.2"}
        ring/ring-core {:mvn/version "1.12.1"}
        ring/ring-jetty-adapter {:mvn/version "1.12.1"}}}

jetty_example.clj

(ns jetty-example
  (:require [ring.adapter.jetty :refer [run-jetty]]))

(defn handler []
  {:status 200
   :headers {"content-type" "text/plain"}
   :body "Salutare națiune!"})

(run-jetty handler {:port 3000
                    :join? false})

*e

Evaluating the above gives me this:

; Evaluating file: jetty_example.clj
;
; Execution error (ClassNotFoundException) at java.net.URLClassLoader/findClass (URLClassLoader.java:445).
; jakarta.servlet.AsyncContext
; Evaluation of file jetty_example.clj failed: class clojure.lang.Compiler$CompilerException
clj꞉jetty-example꞉> 
#error {
 :cause "jakarta.servlet.AsyncContext"
 :via
 [{:type clojure.lang.Compiler$CompilerException
   :message "Syntax error macroexpanding at (ring/util/jakarta/servlet.clj:1:1)."
   :data #:clojure.error{:phase :execution, :line 1, :column 1, :source "ring/util/jakarta/servlet.clj"}
   :at [clojure.lang.Compiler load "Compiler.java" 7665]}
  {:type java.lang.ClassNotFoundException
   :message "jakarta.servlet.AsyncContext"
   :at [java.net.URLClassLoader findClass "URLClassLoader.java" 445]}]
 :trace
 [[java.net.URLClassLoader findClass "URLClassLoader.java" 445]
  [clojure.lang.DynamicClassLoader findClass "DynamicClassLoader.java" 69]
  [java.lang.ClassLoader loadClass "ClassLoader.java" 593]
  [clojure.lang.DynamicClassLoader loadClass "DynamicClassLoader.java" 77]
  [java.lang.ClassLoader loadClass "ClassLoader.java" 526]
  [java.lang.Class forName0 "Class.java" -2]
  [java.lang.Class forName "Class.java" 534]
  [java.lang.Class forName "Class.java" 513]
  [clojure.lang.RT classForName "RT.java" 2209]
  [clojure.lang.RT classForNameNonLoading "RT.java" 2222]
  [ring.util.jakarta.servlet$eval9099$loading__6789__auto____9100 invoke "servlet.clj" 1]
  [ring.util.jakarta.servlet$eval9099 invokeStatic "servlet.clj" 1]
  [ring.util.jakarta.servlet$eval9099 invoke "servlet.clj" 1]
  [clojure.lang.Compiler eval "Compiler.java" 7194]
  [clojure.lang.Compiler eval "Compiler.java" 7183]
  [clojure.lang.Compiler load "Compiler.java" 7653]
  [clojure.lang.RT loadResourceScript "RT.java" 381]
  [clojure.lang.RT loadResourceScript "RT.java" 372]
  [clojure.lang.RT load "RT.java" 459]
  [clojure.lang.RT load "RT.java" 424]
  [clojure.core$load$fn__6908 invoke "core.clj" 6162]
  [clojure.core$load invokeStatic "core.clj" 6161]
  [clojure.core$load doInvoke "core.clj" 6145]
  [clojure.lang.RestFn invoke "RestFn.java" 408]
  [clojure.core$load_one invokeStatic "core.clj" 5934]
  [clojure.core$load_one invoke "core.clj" 5929]
  [clojure.core$load_lib$fn__6850 invoke "core.clj" 5976]
  [clojure.core$load_lib invokeStatic "core.clj" 5975]
  [clojure.core$load_lib doInvoke "core.clj" 5954]
  [clojure.lang.RestFn applyTo "RestFn.java" 142]
  [clojure.core$apply invokeStatic "core.clj" 669]
  [clojure.core$load_libs invokeStatic "core.clj" 6017]
  [clojure.core$load_libs doInvoke "core.clj" 6001]
  [clojure.lang.RestFn applyTo "RestFn.java" 137]
  [clojure.core$apply invokeStatic "core.clj" 669]
  [clojure.core$require invokeStatic "core.clj" 6039]
  [clojure.core$require doInvoke "core.clj" 6039]
  [clojure.lang.RestFn invoke "RestFn.java" 436]
  [ring.adapter.jetty$eval9091$loading__6789__auto____9092 invoke "jetty.clj" 1]
  [ring.adapter.jetty$eval9091 invokeStatic "jetty.clj" 1]
  [ring.adapter.jetty$eval9091 invoke "jetty.clj" 1]
  [clojure.lang.Compiler eval "Compiler.java" 7194]
  [clojure.lang.Compiler eval "Compiler.java" 7183]
  [clojure.lang.Compiler load "Compiler.java" 7653]
  [clojure.lang.RT loadResourceScript "RT.java" 381]
  [clojure.lang.RT loadResourceScript "RT.java" 372]
  [clojure.lang.RT load "RT.java" 459]
  [clojure.lang.RT load "RT.java" 424]
  [clojure.core$load$fn__6908 invoke "core.clj" 6162]
  [clojure.core$load invokeStatic "core.clj" 6161]
  [clojure.core$load doInvoke "core.clj" 6145]
  [clojure.lang.RestFn invoke "RestFn.java" 408]
  [clojure.core$load_one invokeStatic "core.clj" 5934]
  [clojure.core$load_one invoke "core.clj" 5929]
  [clojure.core$load_lib$fn__6850 invoke "core.clj" 5976]
  [clojure.core$load_lib invokeStatic "core.clj" 5975]
  [clojure.core$load_lib doInvoke "core.clj" 5954]
  [clojure.lang.RestFn applyTo "RestFn.java" 142]
  [clojure.core$apply invokeStatic "core.clj" 669]
  [clojure.core$load_libs invokeStatic "core.clj" 6017]
  [clojure.core$load_libs doInvoke "core.clj" 6001]
  [clojure.lang.RestFn applyTo "RestFn.java" 137]
  [clojure.core$apply invokeStatic "core.clj" 669]
  [clojure.core$require invokeStatic "core.clj" 6039]
  [clojure.core$require doInvoke "core.clj" 6039]
  [clojure.lang.RestFn invoke "RestFn.java" 408]
  [jetty_example$eval9083$loading__6789__auto____9084 invoke "jetty_example.clj" 1]
  [jetty_example$eval9083 invokeStatic "jetty_example.clj" 1]
  [jetty_example$eval9083 invoke "jetty_example.clj" 1]
  [clojure.lang.Compiler eval "Compiler.java" 7194]
  [clojure.lang.Compiler eval "Compiler.java" 7183]
  [clojure.lang.Compiler load "Compiler.java" 7653]
  [user$eval9079 invokeStatic "NO_SOURCE_FILE" 1]
  [user$eval9079 invoke "NO_SOURCE_FILE" 1]
  [clojure.lang.Compiler eval "Compiler.java" 7194]
  [clojure.lang.Compiler eval "Compiler.java" 7149]
  [clojure.core$eval invokeStatic "core.clj" 3216]
  [clojure.core$eval invoke "core.clj" 3212]
  [nrepl.middleware.interruptible_eval$evaluate$fn__1359$fn__1360 invoke "interruptible_eval.clj" 87]
  [clojure.lang.AFn applyToHelper "AFn.java" 152]
  [clojure.lang.AFn applyTo "AFn.java" 144]
  [clojure.core$apply invokeStatic "core.clj" 667]
  [clojure.core$with_bindings_STAR_ invokeStatic "core.clj" 1990]
  [clojure.core$with_bindings_STAR_ doInvoke "core.clj" 1990]
  [clojure.lang.RestFn invoke "RestFn.java" 425]
  [nrepl.middleware.interruptible_eval$evaluate$fn__1359 invoke "interruptible_eval.clj" 87]
  [clojure.main$repl$read_eval_print__9206$fn__9209 invoke "main.clj" 437]
  [clojure.main$repl$read_eval_print__9206 invoke "main.clj" 437]
  [clojure.main$repl$fn__9215 invoke "main.clj" 458]
  [clojure.main$repl invokeStatic "main.clj" 458]
  [clojure.main$repl doInvoke "main.clj" 368]
  [clojure.lang.RestFn invoke "RestFn.java" 1523]
  [nrepl.middleware.interruptible_eval$evaluate invokeStatic "interruptible_eval.clj" 84]
  [nrepl.middleware.interruptible_eval$evaluate invoke "interruptible_eval.clj" 56]
  [nrepl.middleware.interruptible_eval$interruptible_eval$fn__1392$fn__1396 invoke "interruptible_eval.clj" 152]
  [clojure.lang.AFn run "AFn.java" 22]
  [nrepl.middleware.session$session_exec$main_loop__1462$fn__1466 invoke "session.clj" 218]
  [nrepl.middleware.session$session_exec$main_loop__1462 invoke "session.clj" 217]
  [clojure.lang.AFn run "AFn.java" 22]
  [java.lang.Thread run "Thread.java" 1583]]}

System:

$ clj --version 
Clojure CLI version 1.11.2.1446

java -version
openjdk version "21.0.3" 2024-04-16 LTS
OpenJDK Runtime Environment Temurin-21.0.3+9 (build 21.0.3+9-LTS)
OpenJDK 64-Bit Server VM Temurin-21.0.3+9 (build 21.0.3+9-LTS, mixed mode, sharing)

It seems the older versions are also failing with jdk 21 and 17 .
I tried 1.11.0, 1.10.0, 1.9.6 and 1.8.0 .

The error switches to javax.servlet.AsyncContext.

it was an issue with my system.
After a reboot and OS reinstall things are working.