We’ve run into an interesting issue with the change to Protobuf serialization for the gateway network in Ignition 8.3.4. This error prevents a value ranging from -1 to 3 read from a component custom property from being written from a client running over the gateway network (client is on central gateway, reading/writing remote tag provider over gateway network).
ERROR
Sender
24Mar2026 13:09:31
Unexpected error while delivering message to the transport layer.
com.inductiveautomation.ignition.common.model.exception.ProtobufSerializationException: Class 'java.math.BigInteger' and object '3' cannot be Protobuf serialized
at com.inductiveautomation.metro.impl.protoserializers.AnyObjectSerializer.toProtobufMessage(AnyObjectSerializer.java:63)
at com.inductiveautomation.ignition.gateway.gan.protoserializers.QualifiedValueSerializer.toProtobufMessage(QualifiedValueSerializer.java:37)
at com.inductiveautomation.ignition.gateway.gan.protoserializers.QualifiedValueSerializer.toProtobufMessage(QualifiedValueSerializer.java:18)
at com.inductiveautomation.metro.impl.protoserializers.ProtobufUtil.packAnyToList(ProtobufUtil.java:190)
at com.inductiveautomation.metro.impl.protoserializers.generic.collection.ListSerializer.toProtobufMessage(ListSerializer.java:46)
at com.inductiveautomation.metro.impl.protoserializers.generic.collection.ListSerializer.toProtobufMessage(ListSerializer.java:21)
at com.inductiveautomation.metro.impl.protoserializers.AnyArgSerializeBuilder.build(AnyArgSerializeBuilder.java:168)
at com.inductiveautomation.metro.impl.protoserializers.ServiceInvocationSerializer.toProtobufMessage(ServiceInvocationSerializer.java:41)
at com.inductiveautomation.metro.impl.protoserializers.ServiceInvocationSerializer.toProtobufMessage(ServiceInvocationSerializer.java:15)
at com.inductiveautomation.metro.impl.protoserializers.ServerMessageSerializer.toProtobufMessage(ServerMessageSerializer.java:47)
at com.inductiveautomation.metro.impl.transport.ProtobufDirectAdapter.adaptData(ProtobufDirectAdapter.java:79)
at com.inductiveautomation.metro.impl.transport.ProtobufDirectAdapter.adaptData(ProtobufDirectAdapter.java:29)
at com.inductiveautomation.metro.impl.transport.AbstractTransportAdapter.handle(AbstractTransportAdapter.java:59)
at com.inductiveautomation.metro.impl.MessageSendManager.sendNext(MessageSendManager.java:232)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.base/java.util.concurrent.FutureTask.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: com.inductiveautomation.metro.api.ex.SerializableNotFoundException: ProtobufSerializable implementation not found for Java class 'java.math.BigInteger'
at com.inductiveautomation.metro.api.MetroProtobufRegistry.getByJavaClass(MetroProtobufRegistry.java:296)
at com.inductiveautomation.metro.impl.protoserializers.ProtobufUtil.getSerializer(ProtobufUtil.java:143)
at com.inductiveautomation.metro.impl.protoserializers.AnyObjectSerializer.toProtobufMessage(AnyObjectSerializer.java:60)
... 18 common frames omitted
The source of this “BigInteger” is a custom property setValue with design time constant value of -1, 0, 1, 2, or 3 on five different buttons (last one shown below, all 5 caused the same error, just a different object value in error):
The above screenshot includes the fix. Explicitly converting self.custom.setValue to int resolves the Protobuf serialization errors and everything works as expected again (like it did in 8.1.x). The custom property is otherwise being read as a BigInteger (PyLong) rather than Integer (PyInt) as confirmed by doing a script transform on it:
Is there something else we should be doing to prevent custom properties from being read as PyLong/BigIntegers, or is this a bug we should expect a fix for in a future release?

