Various XML parse exceptions

Hi,

We have just upgraded our gateway to Ignition 7.6.4 and are now seeing lots of XML parse exceptions.

I’m not sure if this is due to a change to the way Ignition reports errors, or if it’s specific to these errors, but rather than giving popups these errors are just appearing in red in the console.

Here are some examples of the most regular ones…

We have this one when a table gains focus:

[Fatal Error] :1:1: Content is not allowed in prolog.
org.xml.sax.SAXParseException: Content is not allowed in prolog.
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1231)
	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
	at com.inductiveautomation.factorypmi.application.components.table.ColumnAttributesMap$ListParser.fromXML(ColumnAttributesMap.java:254)
	at com.inductiveautomation.factorypmi.application.components.table.ColumnAttributesMap.handleListOfStringColorPair(ColumnAttributesMap.java:136)
	at com.inductiveautomation.factorypmi.application.components.table.ColumnAttributesMap.doConversion(ColumnAttributesMap.java:71)
	at com.inductiveautomation.factorypmi.application.components.table.ColumnAttributesMap.<init>(ColumnAttributesMap.java:44)
	at com.inductiveautomation.factorypmi.application.components.PMITable.setColumnAttributesData(PMITable.java:1054)
	at com.inductiveautomation.factorypmi.application.components.PMITable.setColumnAttributesData(PMITable.java:1044)
	at sun.reflect.GeneratedMethodAccessor188.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at com.inductiveautomation.factorypmi.application.binding.AbstractPropertyAdapter.updateTarget(AbstractPropertyAdapter.java:314)
	at com.inductiveautomation.factorypmi.application.binding.CellUpdateAdapter.updateTarget(CellUpdateAdapter.java:213)
	at com.inductiveautomation.factorypmi.application.binding.AbstractPropertyAdapter.updateValue(AbstractPropertyAdapter.java:258)
	at com.inductiveautomation.factorypmi.application.binding.CellUpdateAdapter.eval(CellUpdateAdapter.java:182)
	at com.inductiveautomation.factorypmi.application.binding.CellUpdateAdapter.eval(CellUpdateAdapter.java:120)
	at com.inductiveautomation.factorypmi.application.binding.CellUpdateAdapter.access$000(CellUpdateAdapter.java:29)
	at com.inductiveautomation.factorypmi.application.binding.CellUpdateAdapter$1.run(CellUpdateAdapter.java:205)
	at com.inductiveautomation.ignition.client.util.EDTUtil$ProcessQueue.run(EDTUtil.java:110)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:666)
	at java.awt.EventQueue.access$400(EventQueue.java:81)
	at java.awt.EventQueue$2.run(EventQueue.java:627)
	at java.awt.EventQueue$2.run(EventQueue.java:625)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:636)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

We have these when running deserialisation in our code export script:

java.lang.NullPointerException
	at com.inductiveautomation.factorypmi.application.components.table.ColumnAttributesMap$DoubleDimensionParser.fromXML(ColumnAttributesMap.java:318)
	at com.inductiveautomation.factorypmi.application.components.table.ColumnAttributesMap.handleDoubleDimension(ColumnAttributesMap.java:148)
	at com.inductiveautomation.factorypmi.application.components.table.ColumnAttributesMap.doConversion(ColumnAttributesMap.java:68)
	at com.inductiveautomation.factorypmi.application.components.table.ColumnAttributesMap.<init>(ColumnAttributesMap.java:44)
	at com.inductiveautomation.factorypmi.application.components.PMITable.setColumnAttributesData(PMITable.java:1054)
	at com.inductiveautomation.factorypmi.application.components.PMITable.setColumnAttributesData(PMITable.java:1044)
	at sun.reflect.GeneratedMethodAccessor942.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.handlers.ObjectDeserializationHandler.endSubElement(ObjectDeserializationHandler.java:68)
	at com.inductiveautomation.factorypmi.application.xmlserialization.ComponentDeserializationHandler.endSubElement(ComponentDeserializationHandler.java:93)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.XMLDeserializer$ParseContext.onElementEnd(XMLDeserializer.java:663)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:165)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.parse(BinaryParser.java:51)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.XMLDeserializer.deserializeBinary(XMLDeserializer.java:313)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.XMLDeserializer.deserialize(XMLDeserializer.java:233)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.XMLDeserializer.deserialize(XMLDeserializer.java:209)
	at sun.reflect.GeneratedMethodAccessor910.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:186)
	<snip>
[Fatal Error] :1:1: Premature end of file.
org.xml.sax.SAXParseException: Premature end of file.
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1231)
	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
	at com.inductiveautomation.factorypmi.application.components.table.ColumnAttributesMap$DoubleDimensionParser.fromXML(ColumnAttributesMap.java:325)
	at com.inductiveautomation.factorypmi.application.components.table.ColumnAttributesMap.handleDoubleDimension(ColumnAttributesMap.java:148)
	at com.inductiveautomation.factorypmi.application.components.table.ColumnAttributesMap.doConversion(ColumnAttributesMap.java:68)
	at com.inductiveautomation.factorypmi.application.components.table.ColumnAttributesMap.<init>(ColumnAttributesMap.java:44)
	at com.inductiveautomation.factorypmi.application.components.PMITable.setColumnAttributesData(PMITable.java:1054)
	at com.inductiveautomation.factorypmi.application.components.PMITable.setColumnAttributesData(PMITable.java:1044)
	at sun.reflect.GeneratedMethodAccessor942.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.handlers.ObjectDeserializationHandler.endSubElement(ObjectDeserializationHandler.java:68)
	at com.inductiveautomation.factorypmi.application.xmlserialization.ComponentDeserializationHandler.endSubElement(ComponentDeserializationHandler.java:93)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.XMLDeserializer$ParseContext.onElementEnd(XMLDeserializer.java:663)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:165)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.parse(BinaryParser.java:51)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.XMLDeserializer.deserializeBinary(XMLDeserializer.java:313)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.XMLDeserializer.deserialize(XMLDeserializer.java:233)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.XMLDeserializer.deserialize(XMLDeserializer.java:209)
	at sun.reflect.GeneratedMethodAccessor910.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:186)
	<snip>

I am well aware that this is probably due to some specific data in our resources, but any hints as to what might be causing this would be much appreciated. Have there been any changes to the parser or XML format in 7.6?

Thanks.
Simon

This is from the tiny bits of XML that can be found inside a Table component’s column attributes dataset.

Some of the values in there are stored as tiny XML documents - you’ve got some values that are invalid XML.