"Not an Installation File" error

I have had this error three times now, I think on Polyscope 5.17.x on all occasions.

When the error happens, the installation file cannot be saved and says “Not an Installation File” when trying to load it.

Looking at the installation file, the html closing tags are corrupt. In the bottom of the file, it lists contributions and urcaps in this structure:

  <Contributions>
    <URCaps>
      <Contributed ownerId="ownerId">
        <data key="enabled" value="false"/>
        <data key="major.version" value="5"/>
        <data key="minor.version" value="4"/>
      </Contributed>
      <Contributed ownerId="ownerId">
        <data key="key"

And then it is cut off, without enclosing the html tags.
The file works again if I enclose the tags properly.

Has anyone else experienced this, knows what causes it, and how to avoid it?

I might have removed some missing URCap installation nodes beforehand, but I am unsure. But either way this should not cause issues.

I found a log error probably regarding the issue:

2025-01-21 11:08:45.759 ERROR - Fatal error on installation load {thread: pool-4-thread-1 , loggerClass: com.ur.view.polyscope.persistence.installation.RobotInstallationPersistence$SerializePersistenceStrategy}
com.thoughtworks.xstream.io.StreamException: 
	at com.thoughtworks.xstream.io.xml.DomDriver.createReader(DomDriver.java:115) ~[?:?]
	at com.thoughtworks.xstream.io.xml.DomDriver.createReader(DomDriver.java:80) ~[?:?]
	at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1284) ~[?:?]
	at com.ur.polyscope.persistence.impl.XStreamSerialization.fromXML(XStreamSerialization.java:65) ~[?:?]
	at com.ur.view.polyscope.persistence.installation.InstallationXMLPersistStrategy.unmarshal(InstallationXMLPersistStrategy.java:65) ~[polyscope-internal-view-10.19.95.jar:?]
	at com.ur.view.polyscope.persistence.installation.InstallationXMLPersistStrategy.unmarshal(InstallationXMLPersistStrategy.java:1) ~[polyscope-internal-view-10.19.95.jar:?]
	at gui.tools.URFileUtils.readPlainTextStream(URFileUtils.java:103) ~[polyscope-internal-view-10.19.95.jar:?]
	at gui.tools.URFileUtils.readCompressedStream(URFileUtils.java:97) ~[polyscope-internal-view-10.19.95.jar:?]
	at gui.tools.URFileUtils.readCompressedFile(URFileUtils.java:85) ~[polyscope-internal-view-10.19.95.jar:?]
	at gui.tools.URFileUtils.readPossiblyCompressedFile(URFileUtils.java:77) ~[polyscope-internal-view-10.19.95.jar:?]
	at gui.tools.URFileUtils$DefaultFacade.readPossiblyCompressedFile(URFileUtils.java:256) ~[polyscope-internal-view-10.19.95.jar:?]
	at com.ur.view.polyscope.persistence.installation.RobotInstallationPersistence$SerializePersistenceStrategy.loadFile(RobotInstallationPersistence.java:157) [polyscope-internal-view-10.19.95.jar:?]
	at com.ur.view.polyscope.persistence.installation.RobotInstallationPersistence$SerializePersistenceStrategy.load_aroundBody2(RobotInstallationPersistence.java:190) [polyscope-internal-view-10.19.95.jar:?]
	at com.ur.view.polyscope.persistence.installation.RobotInstallationPersistence$SerializePersistenceStrategy$AjcClosure3.run(RobotInstallationPersistence.java:1) [polyscope-internal-view-10.19.95.jar:?]
	at org.aspectj.runtime.reflect.JoinPointImpl.proceed(JoinPointImpl.java:179) [org.apache.servicemix.bundles.aspectj-1.9.9_1.jar:?]
	at com.ur.lang.InterceptionUtils$1.proceed(InterceptionUtils.java:18) [polyscope-lang-1.7.1.jar:?]
	at com.ur.injection.IgnoreCallInterceptor.process(IgnoreCallInterceptor.java:47) [polyscope-lang-1.7.1.jar:?]
	at com.ur.injection.ChainingInterceptor.invoke(ChainingInterceptor.java:16) [polyscope-lang-1.7.1.jar:?]
	at com.ur.lang.InterceptionUtils.intercept(InterceptionUtils.java:15) [polyscope-lang-1.7.1.jar:?]
	at com.ur.lang.naming.NameChangeAspect.aroundAnnotatedMethod(NameChangeAspect.java:19) [polyscope-lang-1.7.1.jar:?]
	at com.ur.view.polyscope.persistence.installation.RobotInstallationPersistence$SerializePersistenceStrategy.load(RobotInstallationPersistence.java:189) [polyscope-internal-view-10.19.95.jar:?]
	at com.ur.view.polyscope.persistence.installation.RobotInstallationPersistence.load(RobotInstallationPersistence.java:69) [polyscope-internal-view-10.19.95.jar:?]
	at gui.installation.services.RobotInstallationLookupServiceImpl.load(RobotInstallationLookupServiceImpl.java:176) [polyscope-internal-view-10.19.95.jar:?]
	at gui.program.ProgramInstallationHandler.loadRobotInstallationForProgram(ProgramInstallationHandler.java:42) [polyscope-internal-view-10.19.95.jar:?]
	at gui.program.FileManagementProgramComponent$AttemptLoadInstallation.load(FileManagementProgramComponent.java:214) [polyscope-internal-view-10.19.95.jar:?]
	at gui.program.FileManagementProgramComponent.loadRobotInstallationForProgram(FileManagementProgramComponent.java:152) [polyscope-internal-view-10.19.95.jar:?]
	at gui.program.ProgramRootNodeLoad$LoadTask.run(ProgramRootNodeLoad.java:408) [polyscope-internal-view-10.19.95.jar:?]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_171]
	at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_171]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_171]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_171]
	at java.lang.Thread.run(Thread.java:748) [?:1.8.0_171]
Caused by: org.xml.sax.SAXParseException: XML document structures must start and end within the same entity.
	at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:257) ~[?:1.8.0_171]
	at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339) ~[?:1.8.0_171]
	at com.thoughtworks.xstream.io.xml.DomDriver.createReader(DomDriver.java:108) ~[?:?]
	... 31 more
2025-01-21 11:08:51.365 WARN  - Load installation 
	Total elapsed time: 5651ms. {thread: pool-4-thread-1 , loggerClass: com.ur.view.polyscope.persistence.program.LogTime}
2025-01-21 11:08:57.472 ERROR - PolyscopePanel.loadProgram(): loaded program is null {thread: AWT-EventQueue-0 , loggerClass: com.ur.view.polyscope.persistence.program.ProgramRootNodePersistence$LoadFileContainer}

I now think I know what triggers this issue.

When reinstalling a URCap with a different id (in our case due to obfuscation) a duplicate installation node with a warning symbol displays in Installation - URCaps.
When clicking “Remove from Installation”, the installation file is now corrupt upon restart.

So I guess this is now a bug report

1 Like

Any news regarding this issue?

It is extremely limiting when reinstalling URCaps on customers robots.

First off, you can’t save the current program, because the installation file is corrupt so all progress is lost.
Secondly, you need to delete the installation file and generate a new one, which is not ideal at all

I would post it in the bug report section. :slight_smile: Bigger chance that UR themselves see it in there.

1 Like