Skip to content

Instantly share code, notes, and snippets.

@iperdomo
Created December 19, 2013 11:47
Show Gist options
  • Select an option

  • Save iperdomo/8038042 to your computer and use it in GitHub Desktop.

Select an option

Save iperdomo/8038042 to your computer and use it in GitHub Desktop.
Possible return values for handle-malformed
(ns akvo.flow-services.geo
(:require [liberator.core :refer [defresource resource]]
[liberator.dev :refer (wrap-trace)]
[clojure.pprint :refer (pprint)]
[ring.adapter.jetty :refer (run-jetty)]
[compojure.core :refer (defroutes GET)]
[compojure.handler :refer (api)]))
(defresource hello-world
:available-media-types ["application/json"]
:malformed? true
:handle-malformed (fn [ctx]
;; "bad!" ;; OK
;; ["bad!"] ;; OK
;; nil ;; OK
{:body "bad!"} ;; fails
)
:handle-ok "Hello world")
(defroutes app
(GET "/" [] hello-world))
(def handler
(->
(api app)
(wrap-trace :header :ui)))
(def server (run-jetty #'handler {:port 3000 :join? false}))
@iperdomo
Copy link
Copy Markdown
Author

The failing case stack trace:

[qtp2032204138-22] WARN org.eclipse.jetty.server.AbstractHttpConnection - /
java.lang.IllegalArgumentException: No method in multimethod 'render-map-generic' for dispatch value: null
    at clojure.lang.MultiFn.getFn(MultiFn.java:160)
    at clojure.lang.MultiFn.invoke(MultiFn.java:231)
    at liberator.representation$eval2635$fn__2636.invoke(representation.clj:210)
    at liberator.representation$eval2375$fn__2376$G__2366__2383.invoke(representation.clj:23)
    at liberator.core$run_handler.invoke(core.clj:176)
    at liberator.core$handle_malformed.invoke(core.clj:485)
    at liberator.core$decide.invoke(core.clj:93)
    at liberator.core$malformed_QMARK_.invoke(core.clj:486)
    at liberator.core$decide.invoke(core.clj:93)
    at liberator.core$method_allowed_QMARK_.invoke(core.clj:489)
    at liberator.core$decide.invoke(core.clj:93)
    at liberator.core$uri_too_long_QMARK_.invoke(core.clj:492)
    at liberator.core$decide.invoke(core.clj:93)
    at liberator.core$known_method_QMARK_.invoke(core.clj:495)
    at liberator.core$decide.invoke(core.clj:93)
    at liberator.core$service_available_QMARK_.invoke(core.clj:498)
    at liberator.core$run_resource.invoke(core.clj:572)
    at akvo.flow_services.geo$hello_world.invoke(NO_SOURCE_FILE:1)
    at compojure.response$fn__214.invoke(response.clj:27)
    at compojure.response$fn__191$G__186__198.invoke(response.clj:10)
    at compojure.core$make_route$fn__309.invoke(core.clj:93)
    at compojure.core$if_route$fn__297.invoke(core.clj:39)
    at compojure.core$if_method$fn__290.invoke(core.clj:24)
    at compojure.core$routing$fn__315.invoke(core.clj:106)
    at clojure.core$some.invoke(core.clj:2443)
    at compojure.core$routing.doInvoke(core.clj:106)
    at clojure.lang.RestFn.applyTo(RestFn.java:139)
    at clojure.core$apply.invoke(core.clj:619)
    at compojure.core$routes$fn__319.invoke(core.clj:111)
    at ring.middleware.keyword_params$wrap_keyword_params$fn__966.invoke(keyword_params.clj:27)
    at ring.middleware.nested_params$wrap_nested_params$fn__1005.invoke(nested_params.clj:65)
    at ring.middleware.params$wrap_params$fn__445.invoke(params.clj:55)
    at liberator.dev$wrap_trace$fn__3281.invoke(dev.clj:230)
    at liberator.dev$wrap_trace_ui$fn__3265.invoke(dev.clj:198)
    at compojure.core$routing$fn__315.invoke(core.clj:106)
    at clojure.core$some.invoke(core.clj:2443)
    at compojure.core$routing.doInvoke(core.clj:106)
    at clojure.lang.RestFn.applyTo(RestFn.java:139)
    at clojure.core$apply.invoke(core.clj:619)
    at compojure.core$routes$fn__319.invoke(core.clj:111)
    at liberator.dev$wrap_trace_header$fn__3272.invoke(dev.clj:207)
    at clojure.lang.Var.invoke(Var.java:415)
    at ring.adapter.jetty$proxy_handler$fn__540.invoke(jetty.clj:18)
    at ring.adapter.jetty.proxy$org.eclipse.jetty.server.handler.AbstractHandler$0.handle(Unknown Source)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:111)
    at org.eclipse.jetty.server.Server.handle(Server.java:349)
    at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:452)
    at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:884)
    at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:938)
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:634)
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:230)
    at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:76)
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:609)
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:45)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:599)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:534)
    at java.lang.Thread.run(Thread.java:679)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment