ring-clojure / ring

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

Can't call methods on server on jetty configurator function #352

Closed iyedbennour closed 6 years ago

iyedbennour commented 6 years ago

Hi I an new to ring and clojure. I am trying to make this code work but I am unable to call any method on the server argument in the configurator function?

(ns clj-srv.core
  (:gen-class)
  (:require [ring.adapter.jetty :as jetty]))

(defn configurator
  [server]
  println((.getVersion server)))

(defn -main
  [port-number]
  (try
    (jetty/run-jetty
     (fn [request]
       (println request)
       {:status  200
        :body    "<h1>Hello, Clojure World</h1>  <p>Welcome to your first Clojure app.  This message is returned regardless of the request, sorry</p>"
        :headers {}})
     {:port (Integer. port-number) :configurator configurator})
    ; (throw (Exception. "boom"))
    (catch Exception e (println (str "boom: " (.getMessage e))))))

running lein run 8080 prints the following on the console:

2018-10-21 15:17:50.519:INFO::main: Logging initialized @819ms
boom: No matching field found: getVersion for class org.eclipse.jetty.server.Server

Although the class org.eclipse.jetty.server.Server does exist. What am I doing wrong ?

➜  clj-webserver lein deps :tree
 [clojure-complete "0.2.4" :exclusions [[org.clojure/clojure]]]
 [org.clojure/clojure "1.10.0-beta3"]
   [org.clojure/core.specs.alpha "0.2.44"]
   [org.clojure/spec.alpha "0.2.176"]
 [org.clojure/tools.nrepl "0.2.12" :exclusions [[org.clojure/clojure]]]
 [ring "1.4.0"]
   [ring/ring-core "1.4.0"]
     [clj-time "0.9.0"]
       [joda-time "2.6"]
     [commons-fileupload "1.3.1"]
     [commons-io "2.4"]
     [crypto-equality "1.0.0"]
     [crypto-random "1.2.0"]
     [org.clojure/tools.reader "0.9.1"]
     [ring/ring-codec "1.0.0"]
       [commons-codec "1.6"]
   [ring/ring-devel "1.4.0"]
     [clj-stacktrace "0.2.8"]
     [hiccup "1.0.5"]
     [ns-tracker "0.3.0"]
       [org.clojure/java.classpath "0.2.2"]
       [org.clojure/tools.namespace "0.2.10"]
   [ring/ring-jetty-adapter "1.4.0"]
     [org.eclipse.jetty/jetty-server "9.2.10.v20150310"]
       [javax.servlet/javax.servlet-api "3.1.0"]
       [org.eclipse.jetty/jetty-http "9.2.10.v20150310"]
         [org.eclipse.jetty/jetty-util "9.2.10.v20150310"]
       [org.eclipse.jetty/jetty-io "9.2.10.v20150310"]
   [ring/ring-servlet "1.4.0"]
weavejester commented 6 years ago

getVersion is a static method, not an object method.