Ignition Gateway log error: Unexpected error while delivering message to the transport layer

Extracted text (via AI so could have some wrong parts):

java.lang.NullPointerException: null
    at java.base/java.util.Objects.requireNonNull(Unknown Source)
    at com.inductiveautomation.ignition.common.gson.JsonPrimitive.<init>(JsonPrimitive.java:63)
    at com.inductiveautomation.ignition.common.alarming.query.conditions.PropertyCondition$GsonAdapter.serializeSubCondition(PropertyCondition.java:778)
    at com.inductiveautomation.ignition.common.alarming.query.conditions.PropertyCondition$GsonAdapter.serialize(PropertyCondition.java:747)
    at com.inductiveautomation.ignition.common.alarming.query.conditions.PropertyCondition$GsonAdapter.serialize(PropertyCondition.java:587)
    at com.inductiveautomation.ignition.common.gson.internal.bind.TreeTypeAdapter.write(TreeTypeAdapter.java:88)
    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.gateway.gan.protoserializers.alarm.AlarmFilterSerializer.serializePropsFilter(AlarmFilterSerializer.java:454)
    at com.inductiveautomation.ignition.gateway.gan.protoserializers.alarm.AlarmFilterSerializer.toProtobufMessage(AlarmFilterSerializer.java:117)
    at com.inductiveautomation.ignition.gateway.gan.protoserializers.alarm.AlarmFilterSerializer.toProtobufMessage(AlarmFilterSerializer.java:63)
    at com.inductiveautomation.metro.impl.protoserializers.AnyArgSerializer.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)

so, how to address it ? thanks for your quick support

Not sure, I was just converting the stack trace into something more usable and retitling the topic to be descriptive.

I would suggest that an alarm query param has a null value? That's about all I can offer sorry

Providing just a stack trace with no context won't help you get an answer, can you provide some more details of what isn't working? Just based on the stack trace my guess is its something with remote alarm querying.

The complete error message is as follows:

ERROR
Sender

07May2026 14:00:38
Unexpected error while delivering message to the transport layer.
java.lang.NullPointerException: null

at java.base/java.util.Objects.requireNonNull(Unknown Source)

at com.inductiveautomation.ignition.common.gson.JsonPrimitive.(JsonPrimitive.java:63)

at com.inductiveautomation.ignition.common.alarming.query.conditions.PropertyCondition$GsonAdapter.serializeSubCondition(PropertyCondition.java:778)

at com.inductiveautomation.ignition.common.alarming.query.conditions.PropertyCondition$GsonAdapter.serialize(PropertyCondition.java:747)

at com.inductiveautomation.ignition.common.alarming.query.conditions.PropertyCondition$GsonAdapter.serialize(PropertyCondition.java:587)

at com.inductiveautomation.ignition.common.gson.internal.bind.TreeTypeAdapter.write(TreeTypeAdapter.java:88)

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.gateway.gan.protoserializers.alarm.AlarmFilterSerializer.serializePropsFilter(AlarmFilterSerializer.java:454)

at com.inductiveautomation.ignition.gateway.gan.protoserializers.alarm.AlarmFilterSerializer.toProtobufMessage(AlarmFilterSerializer.java:117)

at com.inductiveautomation.ignition.gateway.gan.protoserializers.alarm.AlarmFilterSerializer.toProtobufMessage(AlarmFilterSerializer.java:63)

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)

Setting the gateway.serializers.AlarmFilterSerializer logger to DEBUG should show you what is being serialized.

Changing Logging Levels

I don't know how plausible it is... But it would be really nice to be able to see suggestions like this in the gateway logging screen when you get errors or warnings. I.e. Under a new badge icon, info like "turn on x logger to capture more details for this error"

It's probably not that simple