Designer Custom Properties misbehaving

While running version 8.1.28 (yes, we need to update) we encountered a strange behavior where the selected view root will not display its custom properties. The custom property section retains the previously viewed properties and will not update. What does "Not a JSON Primitive: null" mean? Is our project corrupt?

The output console returns this stacktrace. Any ideas before I open a ticket?

14:24:59.967 [AWT-EventQueue-0] ERROR ViewResourceEditor - Uncaught exception in "perspective-editor-com.inductiveautomation.perspective/views/MainViews/ARViews/Unload Inspection" event bus
java.lang.IllegalStateException: Not a JSON Primitive: null
	at com.inductiveautomation.ignition.common.gson.JsonElement.getAsJsonPrimitive(JsonElement.java:124)
	at com.inductiveautomation.perspective.designer.workspace.propertyeditor.ComponentPropsDocumentModel$QualityEncodingAwareDocumentModelBuilder.build(ComponentPropsDocumentModel.java:189)
	at com.inductiveautomation.perspective.designer.workspace.propertyeditor.ComponentPropsDocumentModel$QualityEncodingAwareDocumentModelBuilder.lambda$build$1(ComponentPropsDocumentModel.java:176)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.Iterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at com.inductiveautomation.perspective.designer.workspace.propertyeditor.ComponentPropsDocumentModel$QualityEncodingAwareDocumentModelBuilder.build(ComponentPropsDocumentModel.java:175)
	at com.inductiveautomation.perspective.designer.workspace.propertyeditor.ComponentPropsDocumentModel$QualityEncodingAwareDocumentModelBuilder.buildRoot(ComponentPropsDocumentModel.java:156)
	at com.inductiveautomation.perspective.designer.workspace.propertyeditor.ComponentPropsDocumentModel.getRootObject(ComponentPropsDocumentModel.java:64)
	at com.inductiveautomation.perspective.designer.workspace.propertyeditor.ComponentPropsDocumentModel.<init>(ComponentPropsDocumentModel.java:72)
	at com.inductiveautomation.perspective.designer.workspace.propertyeditor.ComponentScopeEditor.onSelectionChanged(ComponentScopeEditor.java:165)
	at com.inductiveautomation.perspective.designer.workspace.propertyeditor.PropertyEditorFrame.setSelection(PropertyEditorFrame.java:587)
	at com.inductiveautomation.perspective.designer.workspace.propertyeditor.PropertyEditorFrame.onSelectionChange(PropertyEditorFrame.java:332)
	at jdk.internal.reflect.GeneratedMethodAccessor55.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
	at com.google.common.eventbus.Subscriber.invokeSubscriberMethod(Subscriber.java:87)
	at com.google.common.eventbus.Subscriber$SynchronizedSubscriber.invokeSubscriberMethod(Subscriber.java:144)
	at com.google.common.eventbus.Subscriber$1.run(Subscriber.java:72)
	at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:398)
	at com.google.common.eventbus.Subscriber.dispatchEvent(Subscriber.java:67)
	at com.google.common.eventbus.Dispatcher$PerThreadQueuedDispatcher.dispatch(Dispatcher.java:108)
	at com.google.common.eventbus.EventBus.post(EventBus.java:212)
	at com.inductiveautomation.perspective.designer.workspace.ViewResourceEditor.onSelectionChanged(ViewResourceEditor.java:326)
	at com.inductiveautomation.perspective.designer.workspace.ViewEditorJsBridge.lambda$onSelectionChangeInternal$6(ViewEditorJsBridge.java:119)
	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(Native Method)
	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)

Yeah, something in your view's stored custom property setup is violating one of our assumptions - specifically we're expecting a number/string/boolean but we're encountering null/an object/an array. Easiest path forward would be to contact support so they can look at your system live and get you moving forward (and hopefully help identify how you got into this state in the first place).

1 Like