0
votes

I am new to clojure and liberator.

I am trying to get started with liberator but I am stuck on the following error.

Here is my code that starts the webserver and defines the routes:

(ns game-of-life.core
  (:require
   [ring.util.response :as resp]
   [compojure.route :as route]
   [ring.adapter.jetty :as jetty])
  (:use
   [ring.middleware.multipart-params :only [wrap-multipart-params]]
   [ring.util.response :only [header]]
   [compojure.core :only [context ANY routes defroutes]]
   [compojure.handler :only [api]]))

  (defn assemble-routes []
    (->
     (routes
        (ANY "/" [] (resp/redirect "/index.html"))

        (route/resources "/"))))

  (def handler
    (-> (assemble-routes))

  (defn start [options]
    (jetty/run-jetty #'handler (assoc options :join? false)))

  (defn -main
    ([port]
       (start {:port (Integer/parseInt port)}))
    ([]
       (-main "3000")))

When I run lein ring server, I get a java.lang.NullPointerException with the following stacktrace:

reload.clj:18 ring.middleware.reload/wrap-reload[fn] stacktrace.clj:17 ring.middleware.stacktrace/wrap-stacktrace-log[fn] stacktrace.clj:80 ring.middleware.stacktrace/wrap-stacktrace-web[fn] jetty.clj:18 ring.adapter.jetty/proxy-handler[fn] (Unknown Source) ring.adapter.jetty.proxy$org.eclipse.jetty.server.handler.AbstractHandler$0.handle HandlerWrapper.java:116 org.eclipse.jetty.server.handler.HandlerWrapper.handle Server.java:363 org.eclipse.jetty.server.Server.handle AbstractHttpConnection.java:483 org.eclipse.jetty.server.AbstractHttpConnection.handleRequest AbstractHttpConnection.java:920 org.eclipse.jetty.server.AbstractHttpConnection.headerComplete AbstractHttpConnection.java:982 org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete HttpParser.java:635 org.eclipse.jetty.http.HttpParser.parseNext HttpParser.java:235 org.eclipse.jetty.http.HttpParser.parseAvailable AsyncHttpConnection.java:82 org.eclipse.jetty.server.AsyncHttpConnection.handle SelectChannelEndPoint.java:628 org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle SelectChannelEndPoint.java:52 org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run QueuedThreadPool.java:608 org.eclipse.jetty.util.thread.QueuedThreadPool.runJob QueuedThreadPool.java:543 org.eclipse.jetty.util.thread.QueuedThreadPool$3.run Thread.java:744 java.lang.Thread.run

2

2 Answers

1
votes

I think it will work better if your handler function get the request argument.

0
votes

Can you try changing the dependencies like this? These versions and the following config totally works for me: (including reloading)

(defproject ..........
 :dependencies [[org.clojure/clojure "1.5.1"]
             [liberator "0.11.0"]
             [ring/ring-core "1.1.8"]
             [ring/ring-jetty-adapter "1.1.8"]
             [compojure "1.1.3"]]
 :main game-of-life.core
 :min-lein-version "2.0.0"
 :plugins [[lein-ring "0.8.10"]]
 :ring {:handler game-of-life.core/handler})

Plus the handler should be

(def handler
(-> (assemble-routes)))