Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Using jjwt 0.12.6 with Play 3.0.5 throws NoSuchMethodError #12817

@niladic

Description

@niladic

Play Version

3.0.5

API

Scala

Operating System

macOS

JDK

17

Library Dependencies

val jjwtVersion = "0.12.6"

val jjwts = Seq(
  "io.jsonwebtoken" % "jjwt-api",
  "io.jsonwebtoken" % "jjwt-impl"
).map(_ % jjwtVersion) ++ Seq(
  ("io.jsonwebtoken" % "jjwt-jackson" % jjwtVersion).excludeAll(
    ExclusionRule("com.fasterxml.jackson.core")
  )
)

Expected Behavior

Since #12474 you allow using jjwt 0.12 which is great, however it does not work when setting play.http.session.maxAge.

Actual Behavior

I have read #12474 and this is likely related, when the config value play.http.session.maxAge is set, Play will crash with a java.lang.NoSuchMethodError: 'io.jsonwebtoken.JwtBuilder io.jsonwebtoken.JwtBuilder.setExpiration(java.util.Date)' (if play.http.session.maxAge is not set, there is no crash).

Here is the stack trace:

Uncaught error from thread [application-pekko.actor.default-dispatcher-15]: 'io.jsonwebtoken.JwtBuilder io.jsonwebtoken.JwtBuilder.setExpiration(java.util.Date)', shutting down JVM since 'pekko.jvm-exit-on-fatal-error' is enabled for ActorSystem[application]
java.lang.NoSuchMethodError: 'io.jsonwebtoken.JwtBuilder io.jsonwebtoken.JwtBuilder.setExpiration(java.util.Date)'
	at play.api.mvc.JWTCookieDataCodec$JWTFormatter.$anonfun$format$2(Cookie.scala:794)
	at scala.Option.map(Option.scala:242)
	at play.api.mvc.JWTCookieDataCodec$JWTFormatter.format(Cookie.scala:792)
	at play.api.mvc.JWTCookieDataCodec.encode(Cookie.scala:643)
	at play.api.mvc.JWTCookieDataCodec.encode$(Cookie.scala:641)
	at play.api.mvc.DefaultJWTCookieDataCodec.encode(Cookie.scala:859)
	at play.api.mvc.FallbackCookieDataCodec.encode(Cookie.scala:841)
	at play.api.mvc.FallbackCookieDataCodec.encode$(Cookie.scala:841)
	at play.api.mvc.DefaultSessionCookieBaker.encode(Session.scala:120)
	at play.api.mvc.CookieBaker.encodeAsCookie(Cookie.scala:478)
	at play.api.mvc.CookieBaker.encodeAsCookie$(Cookie.scala:477)
	at play.api.mvc.DefaultSessionCookieBaker.encodeAsCookie(Session.scala:120)
	at play.api.mvc.Result.$anonfun$bakeCookies$2(Results.scala:359)
	at scala.Option.map(Option.scala:242)
	at play.api.mvc.Result.bakeCookies(Results.scala:358)
	at play.core.server.common.ServerResultUtils.prepareCookies(ServerResultUtils.scala:312)
	at play.core.server.PekkoHttpServer.$anonfun$runAction$6(PekkoHttpServer.scala:494)
	at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:470)
	at org.apache.pekko.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:73)
	at org.apache.pekko.dispatch.BatchingExecutor$BlockableBatch.$anonfun$run$1(BatchingExecutor.scala:110)
	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)
	at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:94)
	at org.apache.pekko.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:110)
	at org.apache.pekko.dispatch.TaskInvocation.run(AbstractDispatcher.scala:59)
	at org.apache.pekko.dispatch.ForkJoinExecutorConfigurator$PekkoForkJoinTask.exec(ForkJoinExecutorConfigurator.scala:57)
	at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
	at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655)
	at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622)
	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)

Reproducible Test Case

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions