IBM / cloudant-java-sdk

Cloudant SDK for Java
Apache License 2.0
22 stars 17 forks source link

Exception at parsing /identity/token response #322

Closed LenarBad closed 2 years ago

LenarBad commented 2 years ago

Describe the bug The client failed to parse a response for a call https://iam.cloud.ibm.com/identity/token - thrown a Gson exception

To Reproduce

Expected behavior Expected - no exception thrown Actual result - thrown a java.lang.RuntimeException (see the stacktrace below)

Screenshots After some debug I found that the successful response was actually received (see the screenshot) but Gson failed to parse it image

Must gather (please complete the following information):

Additional context

java.lang.RuntimeException: Error while fetching access token from token service: 

    at com.ibm.cloud.sdk.core.security.TokenRequestBasedAuthenticator.getToken(TokenRequestBasedAuthenticator.java:272)
    at com.ibm.cloud.sdk.core.security.TokenRequestBasedAuthenticator.authenticate(TokenRequestBasedAuthenticator.java:210)
    at com.ibm.cloud.sdk.core.service.BaseService.setAuthentication(BaseService.java:414)
    at com.ibm.cloud.sdk.core.service.BaseService.createCall(BaseService.java:352)
    at com.ibm.cloud.sdk.core.service.BaseService.createServiceCall(BaseService.java:390)
    at com.ibm.cloud.cloudant.internal.CloudantBaseService.createServiceCall(CloudantBaseService.java:185)
    at com.ibm.cloud.cloudant.v1.Cloudant.getServerInformation(Cloudant.java:223)
    at com.ibm.cloud.cloudant.v1.Cloudant.getServerInformation(Cloudant.java:236)
.....
Caused by: java.lang.NoClassDefFoundError: com/google/gson/ToNumberStrategy
    at com.ibm.cloud.sdk.core.util.ResponseUtils.getValue(ResponseUtils.java:149)
    at com.ibm.cloud.sdk.core.util.ResponseConverterUtils$6.convert(ResponseConverterUtils.java:137)
    at com.ibm.cloud.sdk.core.security.TokenRequestBasedAuthenticator$2.run(TokenRequestBasedAuthenticator.java:323)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: com.google.gson.ToNumberStrategy
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 4 more
ricellis commented 2 years ago

Caused by: java.lang.NoClassDefFoundError: com/google/gson/ToNumberStrategy

IIRC that class was added since GSON 2.8.9.

cloudant-java-sdk@0.2.0 asks for GSON 2.9.0†.

Please make sure you have the correct version of GSON on your classpath or that another requirement isn't putting an older version of GSON earlier on the classpath.

here and via IBM Cloud sdk-core@9.17.3 dependency here.

LenarBad commented 2 years ago

Yes, that was the issue. I think it's worth mentioning somewhere. Anyway thank you!