[IGN-14500]8.3 vision report serialization error

Hi there,

I’ve run into a strange behavior with the report viewer component that didn’t happen in version 8.1. Here's the setup:

I have a window with a report viewer component. The report points to a valid report path and includes a dataset parameter called "data".

Now, here’s what’s happening:

a) If I set a default value for the data (dataset) parameter directly in the report builder, for example using [default]dummy_data with the correct structure and data, everything works fine and the report displays as expected in the viewer.

b) The moment I bind the parameter in the report viewer at runtime, again using [default]dummy_data, I get the following error:

Any idea what might be causing this? It seems like the runtime binding isn’t being picked up correctly, even though this used to work in 8.1.

Another thing while searching the forum I stumbled upon this topic and I don’t know if it can have anything to do with my issue:

Below the full error message:

7:56:48.259 [AWT-EventQueue-0] WARN Vision.reporting.Components.Viewer -- ReportLoader task could not be completed.

java.util.concurrent.ExecutionException: com.inductiveautomation.ignition.common.rpc.proto.ProtoSerializationException: Fallback serialization failed
at java.base/java.util.concurrent.FutureTask.report(Unknown Source)
at java.base/java.util.concurrent.FutureTask.get(Unknown Source)
at java.desktop/javax.swing.SwingWorker.get(Unknown Source)
at com.inductiveautomation.reporting.components.ReportViewer$ReportLoader.done(ReportViewer.java:807)
at java.desktop/javax.swing.SwingWorker$5.run(Unknown Source)
at java.desktop/javax.swing.SwingWorker$DoSubmitAccumulativeRunnable.run(Unknown Source)
at java.desktop/sun.swing.AccumulativeRunnable.run(Unknown Source)
at java.desktop/javax.swing.SwingWorker$DoSubmitAccumulativeRunnable.actionPerformed(Unknown Source)
at java.desktop/javax.swing.Timer.fireActionPerformed(Unknown Source)
at java.desktop/javax.swing.Timer$DoPostEvent.run(Unknown Source)
at java.desktop/java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
Caused by: com.inductiveautomation.ignition.common.rpc.proto.ProtoSerializationException: Fallback serialization failed
at com.inductiveautomation.ignition.common.rpc.proto.BuiltinAdapters.fallbackSerializer(BuiltinAdapters.java:398)
at com.inductiveautomation.ignition.common.rpc.proto.ProtoRpcSerializer.encodeValue(ProtoRpcSerializer.java:119)
at com.inductiveautomation.ignition.common.rpc.proto.ProtoRpcSerializer.protoEncode(ProtoRpcSerializer.java:340)
at com.inductiveautomation.ignition.common.rpc.proto.ProtoRpcSerializer.protoEncode(ProtoRpcSerializer.java:335)
at com.inductiveautomation.ignition.common.rpc.proto.BuiltinAdapters$8.encode(BuiltinAdapters.java:220)
at com.inductiveautomation.ignition.common.rpc.proto.BuiltinAdapters$8.encode(BuiltinAdapters.java:215)
at com.inductiveautomation.ignition.common.rpc.proto.ProtoSerializerBuilder.lambda$addAdapter$9(ProtoSerializerBuilder.java:225)
at com.inductiveautomation.ignition.common.rpc.proto.ProtoSerializerBuilder$SerializationDelegate.encode(ProtoSerializerBuilder.java:325)
at com.inductiveautomation.ignition.common.rpc.proto.ProtoRpcSerializer.encodeObject(ProtoRpcSerializer.java:171)
at com.inductiveautomation.ignition.common.rpc.proto.ProtoRpcSerializer.encodeValue(ProtoRpcSerializer.java:114)
at com.inductiveautomation.ignition.common.rpc.proto.ProtoRpcSerializer.protoEncode(ProtoRpcSerializer.java:340)
at com.inductiveautomation.ignition.common.rpc.proto.ProtoRpcSerializer.protoEncode(ProtoRpcSerializer.java:335)
at com.inductiveautomation.ignition.common.rpc.proto.BuiltinAdapters$10.lambda$encode$0(BuiltinAdapters.java:266)
at java.base/java.util.HashMap.forEach(Unknown Source)
at com.inductiveautomation.ignition.common.rpc.proto.BuiltinAdapters$10.encode(BuiltinAdapters.java:264)
at com.inductiveautomation.ignition.common.rpc.proto.BuiltinAdapters$10.encode(BuiltinAdapters.java:259)
at com.inductiveautomation.ignition.common.rpc.proto.ProtoSerializerBuilder.lambda$addAdapter$9(ProtoSerializerBuilder.java:225)
at com.inductiveautomation.ignition.common.rpc.proto.ProtoSerializerBuilder$SerializationDelegate.encode(ProtoSerializerBuilder.java:325)
at com.inductiveautomation.ignition.common.rpc.proto.ProtoRpcSerializer.encodeObject(ProtoRpcSerializer.java:171)
at com.inductiveautomation.ignition.common.rpc.proto.ProtoRpcSerializer.encodeValue(ProtoRpcSerializer.java:114)
at com.inductiveautomation.ignition.common.rpc.proto.ProtoRpcSerializer.encodeRpcMessage(ProtoRpcSerializer.java:85)
at com.inductiveautomation.ignition.common.rpc.proto.ProtoRpcSerializer.writeParameters(ProtoRpcSerializer.java:374)
at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.lambda$invoke$5(GatewayInterface.java:331)
at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.invokeRaw(GatewayInterface.java:363)
at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.invoke(GatewayInterface.java:328)
at com.inductiveautomation.ignition.client.gateway_interface.GatewayConnection$Rpc$RpcInvocationHandler.invoke(GatewayConnection.java:335)
at jdk.proxy2/jdk.proxy2.$Proxy13.getReportData(Unknown Source)
at com.inductiveautomation.reporting.components.ReportViewer$ReportLoader.doInBackground(ReportViewer.java:775)
at com.inductiveautomation.reporting.components.ReportViewer$ReportLoader.doInBackground(ReportViewer.java:711)
at java.desktop/javax.swing.SwingWorker$1.call(Unknown Source)
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
at java.desktop/javax.swing.SwingWorker.run(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.UnsupportedOperationException: Attempted to serialize java.lang.Class: java.lang.Integer. Forgot to register a type adapter?
at com.inductiveautomation.ignition.common.gson.internal.bind.TypeAdapters$1.write(TypeAdapters.java:76)
at com.inductiveautomation.ignition.common.gson.internal.bind.TypeAdapters$1.write(TypeAdapters.java:72)
at com.inductiveautomation.ignition.common.gson.TypeAdapter$1.write(TypeAdapter.java:196)
at com.inductiveautomation.ignition.common.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:70)
at com.inductiveautomation.ignition.common.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:97)
at com.inductiveautomation.ignition.common.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:61)
at com.inductiveautomation.ignition.common.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:70)
at com.inductiveautomation.ignition.common.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:196)
at com.inductiveautomation.ignition.common.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:368)
at com.inductiveautomation.ignition.common.gson.Gson.toJson(Gson.java:842)
at com.inductiveautomation.ignition.common.gson.Gson.toJsonTree(Gson.java:712)
at com.inductiveautomation.ignition.common.gson.Gson.toJsonTree(Gson.java:689)
at com.inductiveautomation.ignition.common.rpc.proto.BuiltinAdapters.fallbackSerializer(BuiltinAdapters.java:395)
... 34 common frames omitted

Thanks for the report. I was able to mock this up internally; it's not actually the binding it's that you're passing a dataset in as a 'live' parameter value instead of picking it up from a default.

As a temporary workaround, instead of a dataset parameter you could pass a tag path or other reference and use a script data source to read that tag and assign it to the same parameter value.

1 Like