Skip to content

IllegalArgumentException: Unable to create @Body converter for class Query #256

@meyfa

Description

@meyfa

Steps to reproduce:

I am trying to run a query exactly as in the README, for testing:

String flux = "from(bucket:\"log\") |> range(start: 0)";

QueryApi queryApi = influxDBClient.getQueryApi();

List<FluxTable> tables = queryApi.query(flux);
for (FluxTable fluxTable : tables) {
    List<FluxRecord> records = fluxTable.getRecords();
    for (FluxRecord fluxRecord : records) {
        System.out.println(fluxRecord.getTime() + ": " + fluxRecord.getValueByKey("_value"));
    }
}

Note that we also have a dependency on Gson like with #201, but have made sure to set it to 2.8.5 (verified with mvn dependency:tree) and the exception still occurs.
The stack trace differs a bit from #201, either way.

Expected behavior:
Expected something to be printed other than an exception.

Actual behavior:
I received the following stack trace:

java.lang.IllegalArgumentException: Unable to create @Body converter for class com.influxdb.client.domain.Query (parameter #6)
   for method QueryService.postQueryResponseBody
  at retrofit2.Utils.methodError(Utils.java:54)
  at retrofit2.Utils.parameterError(Utils.java:60)
  at retrofit2.RequestFactory$Builder.parseParameterAnnotation(RequestFactory.java:781)
  at retrofit2.RequestFactory$Builder.parseParameter(RequestFactory.java:325)
  at retrofit2.RequestFactory$Builder.build(RequestFactory.java:206)
  at retrofit2.RequestFactory.parseAnnotations(RequestFactory.java:67)
  at retrofit2.ServiceMethod.parseAnnotations(ServiceMethod.java:26)
  at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:202)
  at retrofit2.Retrofit$1.invoke(Retrofit.java:160)
  at jdk.proxy2/jdk.proxy2.$Proxy11.postQueryResponseBody(Unknown Source)
  at com.influxdb.client.internal.QueryApiImpl.query(QueryApiImpl.java:796)
  at com.influxdb.client.internal.QueryApiImpl.query(QueryApiImpl.java:105)
  at com.influxdb.client.internal.QueryApiImpl.query(QueryApiImpl.java:83)
  at com.influxdb.client.internal.QueryApiImpl.query(QueryApiImpl.java:73)
  at altm.database.TimeSeriesDatabaseConnector.getLogEntries(TimeSeriesDatabaseConnector.java:116)
  at altm.logging.LogBuffer.getLogEntries(LogBuffer.java:21)
  at altm.logging.LogManager.getLogEntries(LogManager.java:58)
  at altm.api.rest.ExportLogEndpoint.fetchData(ExportLogEndpoint.java:33)
  at altm.api.rest.ExportLogEndpoint.fetchData(ExportLogEndpoint.java:14)
  at altm.api.rest.TimeIntervalEndpoint.handle(TimeIntervalEndpoint.java:45)
  at altm.api.rest.RestApi.handle(RestApi.java:31)
  at altm.api.rest.RestApiServer$RestHandler.handle(RestApiServer.java:101)
  at jdk.httpserver/com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:93)
  at jdk.httpserver/sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:82)
  at jdk.httpserver/com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:96)
  at jdk.httpserver/sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:692)
  at jdk.httpserver/com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:93)
  at jdk.httpserver/sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:664)
  at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
  at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
  at java.base/java.lang.Thread.run(Thread.java:831)
Caused by: java.lang.RuntimeException: Unable to invoke no-args constructor for class com.influxdb.client.domain.File$FileBodyAdapter. Registering an InstanceCreator with Gson for this type may fix this problem.
  at com.google.gson.internal.ConstructorConstructor$14.construct(ConstructorConstructor.java:228)
  at com.google.gson.internal.bind.JsonAdapterAnnotationTypeAdapterFactory.getTypeAdapter(JsonAdapterAnnotationTypeAdapterFactory.java:55)
  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:113)
  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
  at com.google.gson.Gson.getDelegateAdapter(Gson.java:541)
  at io.gsonfire.gson.WrapTypeAdapterFactory.create(WrapTypeAdapterFactory.java:26)
  at com.google.gson.Gson.getAdapter(Gson.java:458)
  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
  at com.google.gson.Gson.getDelegateAdapter(Gson.java:541)
  at io.gsonfire.gson.WrapTypeAdapterFactory.create(WrapTypeAdapterFactory.java:26)
  at com.google.gson.Gson.getAdapter(Gson.java:458)
  at retrofit2.converter.gson.GsonConverterFactory.requestBodyConverter(GsonConverterFactory.java:74)
  at retrofit2.Retrofit.nextRequestBodyConverter(Retrofit.java:315)
  at retrofit2.Retrofit.requestBodyConverter(Retrofit.java:293)
  at retrofit2.RequestFactory$Builder.parseParameterAnnotation(RequestFactory.java:778)
... 28 more
Caused by: java.lang.UnsupportedOperationException: Cannot allocate class com.influxdb.client.domain.File$FileBodyAdapter
  at com.google.gson.internal.UnsafeAllocator$4.newInstance(UnsafeAllocator.java:104)
  at com.google.gson.internal.ConstructorConstructor$14.construct(ConstructorConstructor.java:225)
... 45 more

Specifications:

  • Client Version: 3.1.0
  • InfluxDB Version: 2.0
  • JDK Version: 16
  • Platform: Docker (Alpine Linux)

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