2014-04-21 3 views
5

Ich bin sehr neu in Clojure und ich habe eine tolle Zeit damit zu spielen. Eine Sache, mit der ich Probleme habe, ist, wie man die Fehler liest, ich persönlich denke, dass sie nicht sehr beschreibend sind, aber das liegt wahrscheinlich an meiner "Neuigkeit".Keine Implementierung der Methode:: make-reader des Protokolls: # 'clojure.java.io/IOFactory gefunden für Klasse: null

Zum Beispiel ist die Frage, die ich jetzt habe, ist, wenn ich versuche meinen Ring Server zu starten (ich kann mehr Details liefern, wenn erforderlich):

Started server on port 3000 
java.lang.IllegalArgumentException: No implementation of method: :make-reader of protocol: #'clojure.java.io/IOFactory found for class: nil 
      core_deftype.clj:544 clojure.core/-cache-protocol-fn 
        io.clj:69 clojure.java.io/fn[fn] 
        io.clj:102 clojure.java.io/reader 
       RestFn.java:410 clojure.lang.RestFn.invoke 
      validator.clj:161 selmer.validator/validate-tags 
      validator.clj:175 selmer.validator/validate 
     template_parser.clj:155 selmer.template-parser/read-template 
     template_parser.clj:206 selmer.template-parser/preprocess-template 
       RestFn.java:410 clojure.lang.RestFn.invoke 
       parser.clj:211 selmer.parser/parse-file 
       parser.clj:234 selmer.parser/parse 
       RestFn.java:442 clojure.lang.RestFn.invoke 
       parser.clj:99 selmer.parser/render-file 
       RestFn.java:425 clojure.lang.RestFn.invoke 
       layout.clj:17 picture-gallery.views.layout/picture-gallery.views.layout.RenderablePage 
        core.clj:94 compojure.core/make-route[fn] 
        core.clj:40 compojure.core/if-route[fn] 
        core.clj:25 compojure.core/if-method[fn] 
        core.clj:107 compojure.core/routing[fn] 
       core.clj:2515 clojure.core/some 
        core.clj:107 compojure.core/routing 
       RestFn.java:139 clojure.lang.RestFn.applyTo 
        core.clj:626 clojure.core/apply 
        core.clj:112 compojure.core/routes[fn] 
        core.clj:107 compojure.core/routing[fn] 
       core.clj:2515 clojure.core/some 
        core.clj:107 compojure.core/routing 
       RestFn.java:139 clojure.lang.RestFn.applyTo 
        core.clj:626 clojure.core/apply 
        core.clj:112 compojure.core/routes[fn] 
      middleware.clj:44 noir.util.middleware/wrap-request-map[fn] 
     keyword_params.clj:32 ring.middleware.keyword-params/wrap-keyword-params[fn] 
      nested_params.clj:70 ring.middleware.nested-params/wrap-nested-params[fn] 
       params.clj:58 ring.middleware.params/wrap-params[fn] 
      middleware.clj:12 hiccup.middleware/wrap-base-url[fn] 
     multipart_params.clj:107 ring.middleware.multipart-params/wrap-multipart-params[fn] 
      middleware.clj:139 noir.util.middleware/wrap-access-rules[fn] 
      validation.clj:135 noir.validation/wrap-noir-validation[fn] 
       cookies.clj:66 noir.cookies/noir-cookies[fn] 
       cookies.clj:171 ring.middleware.cookies/wrap-cookies[fn] 
       session.clj:141 noir.session/noir-flash[fn] 
        flash.clj:31 ring.middleware.flash/wrap-flash[fn] 
       session.clj:96 noir.session/noir-session[fn] 
       session.clj:85 ring.middleware.session/wrap-session[fn] 
        Var.java:379 clojure.lang.Var.invoke 
       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$ff19274a.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:722 java.lang.Thread.run 

Dies ist für mich so unklar ist, wie zu tun Ich weiß genau, was ich falsch gemacht habe? Ich kann mich nicht erinnern, mit irgendwelchen "Make-Readern", Protokollen oder IOFactory zu arbeiten.

Antwort

8

Dies ist eine knifflige Frage ohne viel Zusammenhang zu beantworten. Wie auch immer Sie scheinen zu fallen http://dev.clojure.org/jira/browse/CLJ-1210, was darauf hinweist, dass diese Fehlermeldung deutlich nicht hilfreich ist!

Bitte schauen Sie sich Clojure Clostache error - No implementation of method: :make-reader of protocol: #'clojure.java.io/IOFactory found for class: nil an, was durchaus ein Duplikat sein kann. Das lange und kurze ist, dass eine Ressource, auf die du dich beziehst, nicht existiert. Als Ergebnis wird es als "Null" abgerufen, was zu dem Problem führt, das Sie sehen. Vielleicht ein Fall, in dem eine Bibliothek eine Exception für Ressource-nicht-gefunden auslösen könnte (oder zumindest eine Ausnahme-Variante haben würde).

Eine der Möglichkeiten, auf die ich hier herumging, war, sich den Quellcode anzuschauen, da dies das erste nicht-clojure.core-Stück des Stack-Trace ist. Eines der ersten Dinge, dies tut, ist ...

(defn validate-tags [template] 
    (with-open [rdr (reader template)] 

Von hier einigen Abzug und einem schnell bisschen von mir auf die oben bekam googeln.

[2017 Update: Die nicht hilfreich Fehler in Clojure schließlich fixiert waren 1,8, so hoffentlich werden die Leute nicht mehr dieses Problem sehen!]

+1

Vielen Dank! Das hat mir definitiv geholfen, in die richtige Richtung zu gehen. stellte sich heraus, dass ich den Pfad zu einer Datei in einem meiner html falsch geschrieben hatte: {% erweitert "picture_gallery/views/template/base.html"%} wenn es eigentlich "templates" sein sollte. Ich frage mich, ob dieses CLJ-1210-Problem auf einer neuesten Version von Clojure basiert. –

+0

Sieht so aus, als ob ein Patch angehängt ist, also vielleicht 1.7.0. – pete23

+1

@GustavoMatias Vielen Dank für diesen Hinweis. Hatte den gleichen seltsamen Fehler, der offensichtlich auf eine falsche Projektstruktur in meinem Ressourcenordner zurückzuführen war. – tareq

Verwandte Themen