I am trying to use qbit (https://github.com/advantageous/qbit) for the first time, and I have to deal with all dependencies manually (can’t use maven etc.)
I am getting the following exception:
Exception in thread "main" java.lang.ExceptionInInitializerError at java.base/java.lang.J9VMInternals.ensureError(J9VMInternals.java:186) at java.base/java.lang.J9VMInternals.recordInitializationFailure(J9VMInternals.java:175) at io.advantageous.boon.core.reflection.Reflection.<clinit>(Reflection.java:114) at io.advantageous.boon.core.reflection.ClassMeta.classMeta(ClassMeta.java:271) at io.advantageous.qbit.QBit.registerReflectionAndJsonParser(QBit.java:68) at io.advantageous.qbit.QBit.doGetFactory(QBit.java:57) at io.advantageous.qbit.QBit.factory(QBit.java:45) at io.advantageous.qbit.http.server.HttpServerBuilder.getFactory(HttpServerBuilder.java:136) at io.advantageous.qbit.http.server.HttpServerBuilder.build(HttpServerBuilder.java:236) at com.myapp.main(App.java:92) Caused by: java.lang.ClassCastException: [B incompatible with [C at io.advantageous.boon.core.reflection.FastStringUtils$StringImplementation$1.toCharArray (FastStringUtils.java:93) at io.advantageous.boon.core.reflection.FastStringUtils.toCharArray(FastStringUtils.java:178) at io.advantageous.boon.core.Str.underBarCase(Str.java:538) at io.advantageous.boon.core.Sys.sysProp(Sys.java:329) at io.advantageous.boon.core.timer.TimeKeeperBasic.<init>(TimeKeeperBasic.java:52) at io.advantageous.boon.core.Sys.<clinit>(Sys.java:171) ... 9 more
The jar files I have added so far as dependencies are:
- qbit-web-0.8.18.jar — I have also tried not including this, but it seems to make no difference either way
I have also tried adding the following, which seem to be dependencies according to maven, but with no success:
Additionally, my project uses:
- org.json.jar (not sure which version I have but the jar is from 18th September 2017)
Would anyone be able to tell me what I’m missing? The maven link for qbit is: https://search.maven.org/search?q=io.advantageous.qbit
The problem is that the you are using Java 9+ and the boon dependency hasn’t been updated for Java 9+. The
FastStringUtils class within this library does some reflective hackery to access internal fields of the
String class, but the internal fields of
String changed in Java 9.
This GitHub issue was opened in November 2015 for this problem and is still open almost five years later.
The workarounds are either to run your application in Java 8, or to run your project with the system property
io.advantageous.boon.faststringutils.disable set to
true. You can do this by adding the command-line argument
-Dio.advantageous.boon.faststringutils.disable=true, or by adding the line
main method, before it calls the
build() method shown in the stacktrace.