mbuczko / cerber-oauth2-provider

Clojure implementation of RFC 6749 OAuth 2.0 authorization framework (OAuth2 provider)
Apache License 2.0
58 stars 11 forks source link

Cannot cast java.time.LocalDateTime to org.joda.time.ReadablePartial #15

Closed jaredchendr closed 6 years ago

jaredchendr commented 6 years ago

It occurs the error in below sometimes. Cannot cast java.time.LocalDateTime to org.joda.time.ReadablePartial java.lang.ClassCastException: Cannot cast java.time.LocalDateTime to org.joda.time.ReadablePartial at java.lang.Class.cast(Class.java:3369) ~[na:1.8.0_111] at clojure.lang.Reflector.boxArg(Reflector.java:427) ~[clojure-1.8.0.jar:na] at clojure.lang.Reflector.boxArgs(Reflector.java:460) ~[clojure-1.8.0.jar:na] at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:58) ~[clojure-1.8.0.jar:na] at clojure.lang.Reflector.invokeInstanceMethod(Reflector.java:28) ~[clojure-1.8.0.jar:na] at cerber.helpers$expired_QMARK_.invokeStatic(helpers.clj:51) ~[na:na] at cerber.helpers$expired_QMARK_.invoke(helpers.clj:44) ~[na:na] at cerber.oauth2.context$bearer_valid_QMARK_.invokeStatic(context.clj:69) ~[na:na] at cerber.oauth2.context$bearer_valid_QMARK_.invoke(context.clj:65) ~[na:na] at cerber.handlers$wrap_authorization$fn__24259.invoke(handlers.clj:28) ~[na:na] at cerber.handlers$wrap_errors$fn__24255.invoke(handlers.clj:18) ~[na:na] at ring.middleware.session$wrap_session$fn__24246.invoke(session.clj:108) [na:na] at ring.middleware.format_params$wrap_format_params$fn__8901.invoke(format_params.clj:119) ~[na:na] at ring.middleware.format_response$wrap_format_response$fn__9680.invoke(format_response.clj:194) [na:na]

jaredchendr commented 6 years ago

2017-11-12 15:24:17,102 [XNIO-1 task-28] ERROR hanshulian.com.middleware - #error { :cause Cannot cast org.joda.time.LocalDateTime to java.time.chrono.ChronoLocalDateTime :via [{:type java.lang.ClassCastException :message Cannot cast org.joda.time.LocalDateTime to java.time.chrono.ChronoLocalDateTime :at [java.lang.Class cast Class.java 3369]}] :trace [[java.lang.Class cast Class.java 3369] [clojure.lang.Reflector boxArg Reflector.java 427] [clojure.lang.Reflector boxArgs Reflector.java 460] [clojure.lang.Reflector invokeMatchingMethod Reflector.java 58] [clojure.lang.Reflector invokeInstanceMethod Reflector.java 28] [cerber.helpers$expired_QMARK_ invokeStatic helpers.clj 51] [cerber.helpers$expired_QMARK_ invoke helpers.clj 44] [cerber.stores.session$find_session invokeStatic session.clj 84] [cerber.stores.session$find_session invoke session.clj 82] [cerber.middleware.CustomStore read_session middleware.clj 14] [ring.middleware.session$bare_session_request invokeStatic session.clj 27] [ring.middleware.session$bare_session_request invoke session.clj 24] [ring.middleware.session$session_request invokeStatic session.clj 41] [ring.middleware.session$session_request invoke session.clj 32] [ring.middleware.session$wrap_session$fn__24348 invoke session.clj 107] [ring.middleware.keyword_params$wrap_keyword_params$fn__13660 invoke keyword_params.clj 36] [ring.middleware.nested_params$wrap_nested_params$fn__13708 invoke nested_params.clj 89] [ring.middleware.multipart_params$wrap_multipart_params$fn__26044 invoke multipart_params.clj 173] [ring.middleware.params$wrap_params$fn__13782 invoke params.clj 67] [ring.middleware.cookies$wrap_cookies$fn__24299 invoke cookies.clj 175] [ring.middleware.absolute_redirects$wrap_absolute_redirects$fn__26131 invoke absolute_redirects.clj 47] [ring.middleware.resource$wrap_resource$fn__26060 invoke resource.clj 37] [ring.middleware.content_type$wrap_content_type$fn__17326 invoke content_type.clj 34] [ring.middleware.default_charset$wrap_default_charset$fn__26103 invoke default_charset.clj 31] [ring.middleware.not_modified$wrap_not_modified$fn__17356 invoke not_modified.clj 53] [ring.middleware.x_headers$wrap_x_header$fn__25929 invoke x_headers.clj 22] [ring.middleware.x_headers$wrap_x_header$fn__25929 invoke x_headers.clj 22] [ring.middleware.x_headers$wrap_x_header$fn__25929 invoke x_headers.clj 22] [hanshulian_api.middleware$wrap_context$fn__26563 invoke middleware.clj 37] [hanshulian_api.middleware$wrap_internal_error$fn__26569 invoke middleware.clj 42] [immutant.web.internal.undertow$create_http_handler$reify__29863 handleRequest undertow.clj 239] [org.projectodd.wunderboss.web.undertow.async.websocket.UndertowWebsocket$2 handleRequest UndertowWebsocket.java 109] [io.undertow.server.session.SessionAttachmentHandler handleRequest SessionAttachmentHandler.java 68] [io.undertow.server.Connectors executeRootHandler Connectors.java 211] [io.undertow.server.HttpServerExchange$1 run HttpServerExchange.java 809] [java.util.concurrent.ThreadPoolExecutor runWorker ThreadPoolExecutor.java 1142] [java.util.concurrent.ThreadPoolExecutor$Worker run ThreadPoolExecutor.java 617] [java.lang.Thread run Thread.java 745]]}

jaredchendr commented 6 years ago

2017-11-12 18:26:51,311 [XNIO-1 task-4] ERROR hanshulian.com.middleware - #error { :cause No method in multimethod 'is-before' for dispatch value: class java.sql.Timestamp :via [{:type java.lang.IllegalArgumentException :message No method in multimethod 'is-before' for dispatch value: class java.sql.Timestamp :at [clojure.lang.MultiFn getFn MultiFn.java 156]}] :trace [[clojure.lang.MultiFn getFn MultiFn.java 156] [clojure.lang.MultiFn invoke MultiFn.java 229] [cerber.helpers$expired_QMARK_ invokeStatic helpers.clj 61] [cerber.helpers$expired_QMARK_ invoke helpers.clj 54] [cerber.stores.session$find_session invokeStatic session.clj 84] [cerber.stores.session$find_session invoke session.clj 82] [cerber.middleware.CustomStore read_session middleware.clj 14] [ring.middleware.session$bare_session_request invokeStatic session.clj 27] [ring.middleware.session$bare_session_request invoke session.clj 24] [ring.middleware.session$session_request invokeStatic session.clj 41] [ring.middleware.session$session_request invoke session.clj 32] [ring.middleware.session$wrap_session$fn__24373 invoke session.clj 107] [ring.middleware.keyword_params$wrap_keyword_params$fn__13673 invoke keyword_params.clj 36] [ring.middleware.nested_params$wrap_nested_params$fn__13721 invoke nested_params.clj 89] [ring.middleware.multipart_params$wrap_multipart_params$fn__26069 invoke multipart_params.clj 173] [ring.middleware.params$wrap_params$fn__13795 invoke params.clj 67] [ring.middleware.cookies$wrap_cookies$fn__24324 invoke cookies.clj 175] [ring.middleware.absolute_redirects$wrap_absolute_redirects$fn__26156 invoke absolute_redirects.clj 47] [ring.middleware.resource$wrap_resource$fn__26085 invoke resource.clj 37] [ring.middleware.content_type$wrap_content_type$fn__17339 invoke content_type.clj 34] [ring.middleware.default_charset$wrap_default_charset$fn__26128 invoke default_charset.clj 31] [ring.middleware.not_modified$wrap_not_modified$fn__17369 invoke not_modified.clj 53] [ring.middleware.x_headers$wrap_x_header$fn__25954 invoke x_headers.clj 22] [ring.middleware.x_headers$wrap_x_header$fn__25954 invoke x_headers.clj 22] [ring.middleware.x_headers$wrap_x_header$fn__25954 invoke x_headers.clj 22] [hanshulian_api.middleware$wrap_context$fn__26588 invoke middleware.clj 37] [hanshulian_api.middleware$wrap_internal_error$fn__26594 invoke middleware.clj 42] [immutant.web.internal.undertow$create_http_handler$reify__29888 handleRequest undertow.clj 239] [org.projectodd.wunderboss.web.undertow.async.websocket.UndertowWebsocket$2 handleRequest UndertowWebsocket.java 109] [io.undertow.server.session.SessionAttachmentHandler handleRequest SessionAttachmentHandler.java 68] [io.undertow.server.Connectors executeRootHandler Connectors.java 211] [io.undertow.server.HttpServerExchange$1 run HttpServerExchange.java 809] [java.util.concurrent.ThreadPoolExecutor runWorker ThreadPoolExecutor.java 1142] [java.util.concurrent.ThreadPoolExecutor$Worker run ThreadPoolExecutor.java 617] [java.lang.Thread run Thread.java 745]]}

mbuczko commented 6 years ago

I think the problem is in how clojure determines a type of expires-at datetimes. It uses reflection which at some point deduces wrong type (joda time based) instead on java.sql.Timestamp. Simple type-hinting should solve the problem.

Could you split your PR into 2 which separately solve #13 and #15 ? I would like to apply first your fix for #13 and see if type hints are enough to get rid of these exceptions.

Or I may simply copy & paste your changes with no merge if that saves your time.

jaredchendr commented 6 years ago

Ok, I split the PR into 2 and PR one which separately solve #13 again.

mbuczko commented 6 years ago

Great, I have just pushed my changes with type hints. Could you check if that solves this problem?