I am trying to implement the following in Clojure:
Handler:
// http/handlers/EchoHandler.java
package http.handlers;
import org.rapidoid.http.Req;
import org.rapidoid.u.U;
import java.util.Map;
public class EchoHandler {
public static Map<String, String> handleEcho(Req req) {
return U.map(req.headers());
}
}
Server:
import http.handlers.EchoHandler;
import org.rapidoid.config.Conf;
import org.rapidoid.setup.On;
public class HttpServer {
public static void start() {
Conf.HTTP.set("serverName", Defaults.SERVER_NAME);
Conf.HTTP.set("maxPipeline", Defaults.MAX_PIPELINE);
On.get("/echo").managed(false).json(EchoHandler::handleEcho);
}
}
Now trying to do the same in Clojure:
(ns harrow.http
(:require
; harrow
; external
[clojure.tools.logging :as log ] )
(:import
[org.rapidoid.config Conf ]
[org.rapidoid.setup On OnRoute ]
[org.rapidoid.http.impl RouteOptions ]
[org.rapidoid.http Req ]
[org.rapidoid.u U ]
[java.util Map LinkedHashMap ] ) )
(gen-class
:name harrow.EchoHandler
:methods [ #^{:static true} [handleEcho [org.rapidoid.http.Req] java.util.Map]] )
(defn -handleEcho ^Map [^Req req] (U/map (.headers req)))
Using it:
harrow.main=> (def config-get-route (http/set-http-get-route "/echo"))
harrow.main=> (import harrow.EchoHandler)
harrow.EchoHandler
harrow.main=> (.json config-get-route EchoHandler/handleEcho)
CompilerException java.lang.RuntimeException: Unable to find static field: handleEcho in class harrow.EchoHandler, compiling:(/private/var/folders/nr/g50ld9t91c555dzv91n43bg40000gn/T/form-init16236167396076700327.clj:1:1)
I am wondering what is the proper way of having a static method in Clojure.
jsonmethod expects.