Duplicate Custom Key Perspective

I added a custom prop to a drop down called Selected Item. The view in the browser would not open, said not found. The gateway log error was duplicate key. I removed the binding on the custom prop and I was able to open the view in a browser. I checked in designer where else i had used “Selected Item” and I couldn’t find it. I re-enabled the binding and the browser had the same issue. This time the designer locked up, after resetting it now I’m unable to open the view in the designer and the below error pops up, Since Im not able to open the view in designer Im unable to fix the issue or remove the binding for the time being.

I downloaded the latest nightly to see if it fixed the issue and I didn’t, Prior to that I was on the previous Nightly.

com.inductiveautomation.ignition.common.gson.JsonSyntaxException: java.lang.IllegalStateException: Duplicate key custom.Selected Item (attempted merging values com.inductiveautomation.perspective.common.config.PropertyConfig@2066e89d and com.inductiveautomation.perspective.common.config.PropertyConfig@b123fe)
	at com.inductiveautomation.ignition.common.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:226)
	at com.inductiveautomation.ignition.common.gson.internal.bind.TreeTypeAdapter.read(TreeTypeAdapter.java:63)
	at com.inductiveautomation.ignition.common.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41)
	at com.inductiveautomation.ignition.common.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:82)
	at com.inductiveautomation.ignition.common.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61)
	at com.inductiveautomation.ignition.common.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131)
	at com.inductiveautomation.ignition.common.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222)
	at com.inductiveautomation.ignition.common.gson.internal.bind.TreeTypeAdapter.read(TreeTypeAdapter.java:63)
	at com.inductiveautomation.ignition.common.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41)
	at com.inductiveautomation.ignition.common.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:82)
	at com.inductiveautomation.ignition.common.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61)
	at com.inductiveautomation.ignition.common.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131)
	at com.inductiveautomation.ignition.common.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222)
	at com.inductiveautomation.ignition.common.gson.internal.bind.TreeTypeAdapter.read(TreeTypeAdapter.java:63)
	at com.inductiveautomation.ignition.common.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131)
	at com.inductiveautomation.ignition.common.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222)
	at com.inductiveautomation.ignition.common.gson.internal.bind.TreeTypeAdapter.read(TreeTypeAdapter.java:63)
	at com.inductiveautomation.ignition.common.gson.Gson.fromJson(Gson.java:927)
	at com.inductiveautomation.ignition.common.gson.Gson.fromJson(Gson.java:865)
	at com.inductiveautomation.perspective.common.config.ViewConfig.fromProjectResource(ViewConfig.java:97)
	at com.inductiveautomation.perspective.designer.workspace.ViewResourceEditor.deserialize(ViewResourceEditor.java:186)
	at com.inductiveautomation.perspective.designer.workspace.ViewResourceEditor.deserialize(ViewResourceEditor.java:59)
	at com.inductiveautomation.ignition.designer.tabbedworkspace.ResourceEditor.loadResource(ResourceEditor.java:56)
	at com.inductiveautomation.ignition.designer.tabbedworkspace.ResourceEditor.lambda$new$0(ResourceEditor.java:37)
	at java.base/java.util.Optional.ifPresent(Unknown Source)
	at com.inductiveautomation.ignition.designer.tabbedworkspace.ResourceEditor.<init>(ResourceEditor.java:35)
	at com.inductiveautomation.perspective.designer.workspace.ViewResourceEditor.<init>(ViewResourceEditor.java:101)
	at com.inductiveautomation.perspective.designer.workspace.ViewWorkspace.newResourceEditor(ViewWorkspace.java:269)
	at com.inductiveautomation.ignition.designer.tabbedworkspace.TabbedResourceWorkspace.open(TabbedResourceWorkspace.java:224)
	at com.inductiveautomation.ignition.designer.tabbedworkspace.ResourceNode.open(ResourceNode.java:135)
	at com.inductiveautomation.ignition.designer.navtree.model.AbstractResourceNavTreeNode.onDoubleClick(AbstractResourceNavTreeNode.java:257)
	at com.inductiveautomation.ignition.designer.navtree.NavTreePanel$MouseListener.lambda$mousePressed$0(NavTreePanel.java:655)
	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)
Caused by: java.lang.IllegalStateException: Duplicate key custom.Selected Item (attempted merging values com.inductiveautomation.perspective.common.config.PropertyConfig@2066e89d and com.inductiveautomation.perspective.common.config.PropertyConfig@b123fe)
	at java.base/java.util.stream.Collectors.duplicateKeyException(Unknown Source)
	at java.base/java.util.stream.Collectors.lambda$uniqKeysMapAccumulator$1(Unknown Source)
	at java.base/java.util.stream.ReduceOps$3ReducingSink.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.ReduceOps$ReduceOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.collect(Unknown Source)
	at com.inductiveautomation.perspective.common.config.PropertyConfigCollection$GsonAdapter.deserialize(PropertyConfigCollection.java:81)
	at com.inductiveautomation.perspective.common.config.PropertyConfigCollection$GsonAdapter.deserialize(PropertyConfigCollection.java:73)
	at com.inductiveautomation.ignition.common.gson.internal.bind.TreeTypeAdapter.read(TreeTypeAdapter.java:69)
	at com.inductiveautomation.ignition.common.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131)
	at com.inductiveautomation.ignition.common.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222)
	... 44 more

Ignition v(Dev Version)
Java: Azul Systems, Inc. 11.0.2

	

Try opening the view.json file from the file system in a text editor.

data/projects/projectname/com.inductiveautomation.perspective/views/your view name

Thankyou,

Even when I edited the json file to change the name of the custom prop it still would not open. There wasn’t much data on that view anyway so I just re-created it.

I just thought it was strange and possibly a bug that the designer wouldn’t let me open the view to make the changes to fix it.