taoensso / carmine

Redis client + message queue for Clojure
https://www.taoensso.com/carmine
Eclipse Public License 1.0
1.16k stars 131 forks source link

JSON parser does not support UTF-16 or UTF-32 #75

Closed vbauer closed 10 years ago

vbauer commented 10 years ago

Hello Peter, I've got a strange error during playing with sandbox project. Maybe you could help me..

I've got an exception:

java.lang.Exception: ERR Error running script (call to f_6507f875a7bdb3f843f59e2369875e092d1e9f84): @user_script:11: user_script:11: JSON parser does not support UTF-16 or UTF-32 
                   protocol.clj:129 taoensso.carmine.protocol/get-basic-reply
                   protocol.clj:188 taoensso.carmine.protocol/get-parsed-reply
                   protocol.clj:216 taoensso.carmine.protocol/get-parsed-replies
                          db.clj:47 ziggurat.db/run-lua-script[fn]
                          db.clj:47 ziggurat.db/run-lua-script[fn]
                          db.clj:47 ziggurat.db/run-lua-script
                    RestFn.java:423 clojure.lang.RestFn.invoke
                          db.clj:42 ziggurat.db/create-post
                    RestFn.java:408 clojure.lang.RestFn.invoke
                          db.clj:54 ziggurat.db/find-posts
                      routes.clj:22 ziggurat.routes/fn
                        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:2443 clojure.core/some
                       core.clj:107 compojure.core/routing
                    RestFn.java:139 clojure.lang.RestFn.applyTo
                       core.clj:619 clojure.core/apply
                       core.clj:112 compojure.core/routes[fn]
                       core.clj:107 compojure.core/routing[fn]
                      core.clj:2443 clojure.core/some
                       core.clj:107 compojure.core/routing
                    RestFn.java:139 clojure.lang.RestFn.applyTo
                       core.clj:619 clojure.core/apply
                       core.clj:112 compojure.core/routes[fn]
                        json.clj:21 ring.middleware.json/wrap-json-body[fn]
                  middleware.clj:44 noir.util.middleware/wrap-request-map[fn]
              keyword_params.clj:27 ring.middleware.keyword-params/wrap-keyword-params[fn]
               nested_params.clj:65 ring.middleware.nested-params/wrap-nested-params[fn]
                      params.clj:55 ring.middleware.params/wrap-params[fn]
                  middleware.clj:12 hiccup.middleware/wrap-base-url[fn]
               format_params.clj:98 ring.middleware.format-params/wrap-format-params[fn]
            format_response.clj:113 ring.middleware.format-response/wrap-format-response[fn]
           multipart_params.clj:103 ring.middleware.multipart-params/wrap-multipart-params[fn]
                 validation.clj:140 noir.validation/wrap-noir-validation[fn]
                     cookies.clj:72 noir.cookies/noir-cookies[fn]
                    cookies.clj:160 ring.middleware.cookies/wrap-cookies[fn]
                    session.clj:142 noir.session/noir-flash[fn]
                       flash.clj:14 ring.middleware.flash/wrap-flash[fn]
                     session.clj:97 noir.session/noir-session[fn]
                     session.clj:43 ring.middleware.session/wrap-session[fn]
                    cookies.clj:160 ring.middleware.cookies/wrap-cookies[fn]
                       Var.java:415 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$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:662 java.lang.Thread.run

Lua script (just a test):

-- Find all existed tags
local rawTags = redis.call('smembers', 'tags')
local existedTags = {}
for i = 1, #rawTags do
    local rawTag = rawTags[i]
    table.insert(existedTags, cjson.decode(rawTag))
end

-- Find or create post tags
local postInfo = cjson.decode(ARGV[1])
local tagNames = postInfo.tags

local tags = {}
for i = 1, #tagNames do
    local tagName = tagNames[i]
    table.insert(tags, tagName)
end

return '{"ok": "' .. #tags .. '"}'

All my sources and Lua scripts have encoding "UTF-8", but script fails on line:

local postInfo = cjson.decode(ARGV[1])

I transfer there (ARGV[1]) the following JSON object: "{\"tags\": [\"Java\", \"Clojure\"]}"

I found that this error message is sent by Redis (http://download.redis.io/redis-stable/deps/lua/src/lua_cjson.c), but still don't understand where is the problem..

Thanks in advance for any help!

vbauer commented 10 years ago

I'm so sorry. This issue could be closed. I passed incorrect ARGV parameter (not "{\"tags\": [\"Java\", \"Clojure\"]}", but nil).

ptaoussanis commented 10 years ago

Hi Vladislav, no problem - happy you found a solution! Cheers :-)