cognitect-labs / vase

Data driven microservices
Eclipse Public License 1.0
374 stars 40 forks source link

Query action doesn't handle multiple parameters properly #46

Closed milt closed 7 years ago

milt commented 7 years ago

Description

An attempt to bind multiple parameters into a query like so:

"/:foo/:bar"  {:get #vase/query {:name :myapi.v1/a-query
                                      :params [foo bar]
                                      :query [:find ?e
                                              :in $ ?foo ?bar
                                              :where
                                              [?e :foo ?foo]
                                              [?e :bar ?bar]]}}

Will fail, with an error related to parsing params:

clojure.lang.ExceptionInfo: Interceptor Exception: Wrong number of args (7) passed to: actions/coerce-arg-val

Expected Behavior

It should allow queries with multiple inputs bound.

Actual Behavior

Error processing request!
Exception:

clojure.lang.ExceptionInfo: Interceptor Exception: Wrong number of args (7) passed to: actions/coerce-arg-val
 at clojure.core$ex_info.invokeStatic (core.clj:4725)
    clojure.core$ex_info.invoke (core.clj:4725)
    io.pedestal.interceptor.chain$throwable__GT_ex_info.invokeStatic (chain.clj:33)
    io.pedestal.interceptor.chain$throwable__GT_ex_info.invoke (chain.clj:32)
    io.pedestal.interceptor.chain$try_f.invokeStatic (chain.clj:55)
    io.pedestal.interceptor.chain$try_f.invoke (chain.clj:42)
    io.pedestal.interceptor.chain$process_all_with_binding.invokeStatic (chain.clj:169)
    io.pedestal.interceptor.chain$process_all_with_binding.invoke (chain.clj:144)
    io.pedestal.interceptor.chain$process_all$fn__8778.invoke (chain.clj:186)
    clojure.lang.AFn.applyToHelper (AFn.java:152)
    clojure.lang.AFn.applyTo (AFn.java:144)
    clojure.core$apply.invokeStatic (core.clj:657)
    clojure.core$with_bindings_STAR_.invokeStatic (core.clj:1963)
    clojure.core$with_bindings_STAR_.doInvoke (core.clj:1963)
    clojure.lang.RestFn.invoke (RestFn.java:425)
    io.pedestal.interceptor.chain$process_all.invokeStatic (chain.clj:184)
    io.pedestal.interceptor.chain$process_all.invoke (chain.clj:180)
    io.pedestal.interceptor.chain$enter_all.invokeStatic (chain.clj:233)
    io.pedestal.interceptor.chain$enter_all.invoke (chain.clj:227)
    io.pedestal.interceptor.chain$execute.invokeStatic (chain.clj:377)
    io.pedestal.interceptor.chain$execute.invoke (chain.clj:350)
    io.pedestal.interceptor.chain$execute.invokeStatic (chain.clj:387)
    io.pedestal.interceptor.chain$execute.invoke (chain.clj:350)
    io.pedestal.http.impl.servlet_interceptor$interceptor_service_fn$fn__12774.invoke (servlet_interceptor.clj:350)
    io.pedestal.http.servlet.FnServlet.service (servlet.clj:28)
    org.eclipse.jetty.servlet.ServletHolder.handle (ServletHolder.java:838)
    org.eclipse.jetty.servlet.ServletHandler.doHandle (ServletHandler.java:543)
    org.eclipse.jetty.server.handler.ScopedHandler.nextHandle (ScopedHandler.java:188)
    org.eclipse.jetty.server.handler.ContextHandler.doHandle (ContextHandler.java:1228)
    org.eclipse.jetty.server.handler.ScopedHandler.nextScope (ScopedHandler.java:168)
    org.eclipse.jetty.servlet.ServletHandler.doScope (ServletHandler.java:481)
    org.eclipse.jetty.server.handler.ScopedHandler.nextScope (ScopedHandler.java:166)
    org.eclipse.jetty.server.handler.ContextHandler.doScope (ContextHandler.java:1130)
    org.eclipse.jetty.server.handler.ScopedHandler.handle (ScopedHandler.java:141)
    org.eclipse.jetty.server.handler.HandlerWrapper.handle (HandlerWrapper.java:132)
    org.eclipse.jetty.server.Server.handle (Server.java:564)
    org.eclipse.jetty.server.HttpChannel.handle (HttpChannel.java:318)
    org.eclipse.jetty.server.HttpConnection.onFillable (HttpConnection.java:251)
    org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded (AbstractConnection.java:279)
    org.eclipse.jetty.io.FillInterest.fillable (FillInterest.java:112)
    org.eclipse.jetty.io.ChannelEndPoint$2.run (ChannelEndPoint.java:124)
    org.eclipse.jetty.util.thread.QueuedThreadPool.runJob (QueuedThreadPool.java:672)
    org.eclipse.jetty.util.thread.QueuedThreadPool$2.run (QueuedThreadPool.java:590)
    java.lang.Thread.run (Thread.java:745)
Caused by: clojure.lang.ArityException: Wrong number of args (7) passed to: actions/coerce-arg-val
 at clojure.lang.AFn.throwArity (AFn.java:429)
    clojure.lang.AFn.invoke (AFn.java:57)
    clojure.core$eval30709$fn__30711.invoke (NO_SOURCE_FILE:0)
    io.pedestal.interceptor.chain$try_f.invokeStatic (chain.clj:52)
    io.pedestal.interceptor.chain$try_f.invoke (chain.clj:42)
    io.pedestal.interceptor.chain$process_all_with_binding.invokeStatic (chain.clj:169)
    io.pedestal.interceptor.chain$process_all_with_binding.invoke (chain.clj:144)
    io.pedestal.interceptor.chain$process_all$fn__8778.invoke (chain.clj:186)
    clojure.lang.AFn.applyToHelper (AFn.java:152)
    clojure.lang.AFn.applyTo (AFn.java:144)
    clojure.core$apply.invokeStatic (core.clj:657)
    clojure.core$with_bindings_STAR_.invokeStatic (core.clj:1963)
    clojure.core$with_bindings_STAR_.doInvoke (core.clj:1963)
    clojure.lang.RestFn.invoke (RestFn.java:425)
    io.pedestal.interceptor.chain$process_all.invokeStatic (chain.clj:184)
    io.pedestal.interceptor.chain$process_all.invoke (chain.clj:180)
    io.pedestal.interceptor.chain$enter_all.invokeStatic (chain.clj:233)
    io.pedestal.interceptor.chain$enter_all.invoke (chain.clj:227)
    io.pedestal.interceptor.chain$execute.invokeStatic (chain.clj:377)
    io.pedestal.interceptor.chain$execute.invoke (chain.clj:350)
    io.pedestal.interceptor.chain$execute.invokeStatic (chain.clj:387)
    io.pedestal.interceptor.chain$execute.invoke (chain.clj:350)
    io.pedestal.http.impl.servlet_interceptor$interceptor_service_fn$fn__12774.invoke (servlet_interceptor.clj:350)
    io.pedestal.http.servlet.FnServlet.service (servlet.clj:28)
    org.eclipse.jetty.servlet.ServletHolder.handle (ServletHolder.java:838)
    org.eclipse.jetty.servlet.ServletHandler.doHandle (ServletHandler.java:543)
    org.eclipse.jetty.server.handler.ScopedHandler.nextHandle (ScopedHandler.java:188)
    org.eclipse.jetty.server.handler.ContextHandler.doHandle (ContextHandler.java:1228)
    org.eclipse.jetty.server.handler.ScopedHandler.nextScope (ScopedHandler.java:168)
    org.eclipse.jetty.servlet.ServletHandler.doScope (ServletHandler.java:481)
    org.eclipse.jetty.server.handler.ScopedHandler.nextScope (ScopedHandler.java:166)
    org.eclipse.jetty.server.handler.ContextHandler.doScope (ContextHandler.java:1130)
    org.eclipse.jetty.server.handler.ScopedHandler.handle (ScopedHandler.java:141)
    org.eclipse.jetty.server.handler.HandlerWrapper.handle (HandlerWrapper.java:132)
    org.eclipse.jetty.server.Server.handle (Server.java:564)
    org.eclipse.jetty.server.HttpChannel.handle (HttpChannel.java:318)
    org.eclipse.jetty.server.HttpConnection.onFillable (HttpConnection.java:251)
    org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded (AbstractConnection.java:279)
    org.eclipse.jetty.io.FillInterest.fillable (FillInterest.java:112)
    org.eclipse.jetty.io.ChannelEndPoint$2.run (ChannelEndPoint.java:124)
    org.eclipse.jetty.util.thread.QueuedThreadPool.runJob (QueuedThreadPool.java:672)
    org.eclipse.jetty.util.thread.QueuedThreadPool$2.run (QueuedThreadPool.java:590)
    java.lang.Thread.run (Thread.java:745)

Steps to reproduce

Define a get method with a vase query literal (as above), and specify more than one param from the path, query string, etc.

Environment

Operating System (including version).

Mac OS 10.12.3

Your current Leiningen/Boot/Maven version (lein --version)

Leiningen 2.7.1 on Java 1.8.0_111 Java HotSpot(TM) 64-Bit Server VM

Pedestal and Vase version

Pedestal: 0.5.2 Vase: 0.9.0 - current master