← All tasks
javajwtk/jjwt #614Not a task: not reproduced

Android Project Throwing io.jsonwebtoken.lang.UnknownClassException

envgap__jwtk__jjwt-614

01 / FAILURE SIGNATURE

As reported upstream

java.lang.IllegalStateException: Unable to invoke class method io.jsonwebtoken.impl.crypto.MacProvider#generateKey.  Ensure the necessary implementation is in the runtime classpath.
Not a benchmark task.
  • In a clean container the reported failure did not reproduce, or the known fix did not make the project run.

02 / ENVIRONMENT RECIPE

Base commit
20b04372d2a8c9b3550d34b9ff1c9b3ba203e8a1
Manifest
pom.xml
Reproduce
Awaiting issue-specific recipe
Run under trace
Awaiting a meaningful runtime command

03 / ORIGINAL ISSUE TEXT

jwtk/jjwt #614 · read the original issue
I've setup my project according to the directions. My `build.gradle` is essentially the following:



```

dependencies {

    implementation fileTree(dir:'libs', include: ['*.jar'])

    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.61"

    implementation "com.auth0.android:jwtdecode:1.4.0"

    implementation "com.google.code.gson:gson:2.8.6"



    testImplementation 'junit:junit:4.13'

    testImplementation "io.mockk:mockk:1.10.0"

    api 'io.jsonwebtoken:jjwt-api:0.11.2'

    runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.2'

    runtimeOnly('io.jsonwebtoken:jjwt-orgjson:0.11.2') {

        exclude group: 'org.json', module: 'json' //provided by Android natively

    }



}

```

I am only trying to use this library to generate a JWT in the proper format so that I can unit test my JWT parser. I've created an incredibly simple function to generate the JWT:



```

    private fun createJwtToken(): String {

        val key: Key = Keys.secretKeyFor(SignatureAlgorithm.HS256)

        return Jwts.builder().setSubject("Joe").signWith(key).compact()

}

```

However, I get the following crash the moment that I run my unit test:

```

java.lang.IllegalStateException: Unable to invoke class method io.jsonwebtoken.impl.crypto.MacProvider#generateKey.  Ensure the necessary implementation is in the runtime classpath.



	at io.jsonwebtoken.lang.Classes.invokeStatic(Classes.java:202)

	at io.jsonwebtoken.security.Keys.secretKeyFor(Keys.java:136)

	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

	at java.lang.reflect.Method.invoke(Method.java:498)

	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)

	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)

	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)

	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)

	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)

	at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)

	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)

	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)

	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)

	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)

	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)

	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)

	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)

	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)

	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)

	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)

	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)

	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)

	at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)

	at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)

	at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)

Caused by: io.jsonwebtoken.lang.UnknownClassException: Unable to load class named [io.jsonwebtoken.impl.crypto.MacProvider] from the thread context, current, or system/application ClassLoaders.  All heuristics have been exhausted.  Class could not be found.  Have you remembered to include the jjwt-impl.jar in your runtime classpath?

	at io.jsonwebtoken.lang.Classes.forName(Classes.java:92)

	at io.jsonwebtoken.lang.Classes.invokeStatic(Classes.java:195)

	... 29 more

```

Everywhere that I've looked regarding this issue, the solution seems to always be that I need to ensure I've setup my Gradle dependencies correctly. However, I feel that I've done that and I'm still running into issues. Please let me know if additional information is needed.
Continue on GitHub ↗

04 / LABELS

Labels from the report text only; not yet run

No supported category has been assigned.

Label rules and the text that matched
[]