Element cannot be null, PropertyTree ValueNode, NullPointerException

I'm getting an ExecutionQueue WARN that is all over the logger in a gateway.

I'm working on some other issues, better trapping exception etc... and this one doesn't give me any indication on where or what it causing this. I'm hoping that there is something I can turn on to try and get a bit more details on it.

Logger: com.inductiveautomation.ignition.common.util.ExecutionQueue
Message: Uncaught Throwable during execution.
java.lang.NullPointerException: Element cannot be null
at java.base/java.util.Objects.requireNonNull(Unknown Source)
at com.inductiveautomation.perspective.gateway.property.PropertyTree$ValueNode.(PropertyTree.java:1286)
at com.inductiveautomation.perspective.gateway.property.PropertyTree.nodeFromJson(PropertyTree.java:445)
at com.inductiveautomation.perspective.gateway.property.PropertyTree.nodeFromJson(PropertyTree.java:411)
at com.inductiveautomation.perspective.gateway.property.PropertyTree$ValueNode.write(PropertyTree.java:1349)
at com.inductiveautomation.perspective.gateway.property.PropertyTree.lambda$write$1(PropertyTree.java:543)
at com.inductiveautomation.perspective.gateway.property.PropertyTree.writeImpl(PropertyTree.java:586)
at com.inductiveautomation.perspective.gateway.property.PropertyTree.write(PropertyTree.java:543)
at com.inductiveautomation.perspective.gateway.model.ViewModel.lambda$restart$3(ViewModel.java:214)
at java.base/java.lang.Iterable.forEach(Unknown Source)
at com.inductiveautomation.perspective.gateway.model.ViewModel.restart(ViewModel.java:212)
at com.inductiveautomation.perspective.gateway.model.PageModel$Handlers.lambda$onViewRestart$19(PageModel.java:1045)
at com.inductiveautomation.perspective.gateway.api.LoggingContext.lambda$mdcWrap$0(LoggingContext.java:41)
at com.inductiveautomation.ignition.common.util.TimedRunnable.run(TimedRunnable.java:21)
at com.inductiveautomation.ignition.common.util.ExecutionQueue$PollAndExecute.run(ExecutionQueue.java:239)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

Any other loggers I can turn on to find the root cause of this? Is this safe to ignore?


Gonna be hard to find exactly what it is. If you can reliably reproduce in a browser session, you can use the browser's devtools to look at the traffic going over the websocket and find where there's an object missing a certain key (the type is qv but it's missing a $v encoded value key).

That'll be a bit of an endeavour; probably easiest to go to support with.

If you're not noticing any ill effects, it might be safe enough to ignore. Are there any MDC keys associated with the logged event that help identify where it's from, if you're not sure?

No MDC Key that I can find.

I think I can reliably produce it... I'll take a look at the browser devtools to see if I can see anything obvious.

There isn't any impact to the end user. It's just a repeating error and I'm trying to get rid of as many of those as possible to clean up the logs so I can see important things. If I can't find it I'll get with support.

From the rest of the stack, it's to do with an input parameter on a view during a restart...possibly due to a browser refresh while the session is active?

Hmmm.... on the view that is causing the issues there are 4 data entry items, 2 dates, and 2 drop-down lists. And then a table with a bunch of data. The 4 data entry items are used to filter the named query, and they are tied to session parameters so that they are persistent throughout the session.

The error seems to be generated when the view is first opened, and then after that nothing. The table is set to poll at 30sec (I think). Maybe there is something with the binding from the session parameters into the 4 data entry items?

Could be something like that. Hard to say for sure. If you do get it to happen reliably and you can capture the websocket traffic, I'd be interested to take a look.

The store.ViewStore browser logger might also be helpful. I think you have to use the console to change logging levels in the browser.

What version of ignition you are running?

Just upgraded the gateway to 8.1.22 but I've been seeing this for quite some time, just haven't had time to start deep diving until today.

I think I have it... does chrome save it as a .har file?

I changed the title so that it doesn't look like there is a problem with the ExecutionQueue.

__logging.setConsoleTrace() in the browser console and selecting "Verbose" in the logging levels dropdown will print trace logs to the console.

Setting Perspective logging to trace on the Gateway should probably lead you to the source of the issue.

1 Like