| Summary: | [repository] SimpleArtifactRepositoryFactory prevents loading repositories from non-URL URIs | ||
|---|---|---|---|
| Product: | [Eclipse Project] Equinox | Reporter: | Tobias Oberlies <t-oberlies> |
| Component: | p2 | Assignee: | Tobias Oberlies <t-oberlies> |
| Status: | RESOLVED FIXED | QA Contact: | |
| Severity: | normal | ||
| Priority: | P3 | CC: | pascal, pwebster |
| Version: | 3.6.2 | ||
| Target Milestone: | Juno M7 | ||
| Hardware: | All | ||
| OS: | All | ||
| Whiteboard: | |||
Thought I had commented on this. I agree that in this case a repository not found should be returned. Move all 3.8 bugs to Juno. I've fixed this in master: http://git.eclipse.org/c/equinox/rt.equinox.p2.git/commit/?id=d104b01da65aa65a7b8cfa43287cef8dbebbe168 |
URI is an extension of URL in that it allows to identify resources without having to specify how to locate them. Therefore a non-URL URI, e.g. with a "registry:" scheme is exactly what you would want to use when implementing an ArtifactRepositoryFactory that "load" p2 repositories from a registry service. However the implementation of SimpleArtifactRepositoryFactory insists that all URIs it is asked to load are URLs, and throws an exception which prevents that other factories are even considered. With the SimpleArtifactRepositoryFactory being the first factory to be asked (by default), this breaks all non-URL based factories. I would expect the SimpleArtifactRepositoryFactory to simply return a ProvisionException.REPOSITORY_NOT_FOUND if the URI to load is not a URL. The current implementation breaks at the following code location: org.eclipse.equinox.p2.core.ProvisionException: Invalid source repository location: registry:resolution-context-artifacts@C:%5CEnv%5CSource%5Csonatype-tycho%5Ctycho-its%5Cprojects%5CpomDependencyConsider.p2Data.generate%5Crepository. at org.eclipse.equinox.p2.internal.repository.tools.AbstractApplication.initializeRepos(AbstractApplication.java:126) at org.eclipse.equinox.p2.internal.repository.tools.MirrorApplication.run(MirrorApplication.java:178) at org.eclipse.tycho.p2.tools.impl.mirroring.MirrorApplicationServiceImpl.executeMirroring(MirrorApplicationServiceImpl.java:96) ... 23 more Caused by: org.eclipse.equinox.p2.core.ProvisionException: Malformed reference to remote file: registry:resolution-context-artifacts@C:%5CEnv%5CSource%5Csonatype-tycho%5Ctycho-its%5Cprojects%5CpomDependencyConsider.p2Data.generate%5Crepository/artifacts.xml at org.eclipse.equinox.internal.p2.repository.CacheManager.createCache(CacheManager.java:189) at org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepositoryFactory.getLocalFile(SimpleArtifactRepositoryFactory.java:64) at org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepositoryFactory.load(SimpleArtifactRepositoryFactory.java:83) at org.eclipse.equinox.internal.p2.artifact.repository.ArtifactRepositoryManager.factoryLoad(ArtifactRepositoryManager.java:68) at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:746) at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:651) at org.eclipse.equinox.internal.p2.artifact.repository.ArtifactRepositoryManager.loadRepository(ArtifactRepositoryManager.java:99) at org.eclipse.equinox.p2.internal.repository.tools.AbstractApplication.addRepository(AbstractApplication.java:147) at org.eclipse.equinox.p2.internal.repository.tools.AbstractApplication.initializeRepos(AbstractApplication.java:119) ... 25 more Caused by: java.net.MalformedURLException: unknown protocol: registry at java.net.URL.<init>(URL.java:574) at java.net.URL.<init>(URL.java:464) at java.net.URL.<init>(URL.java:413) at org.eclipse.ecf.provider.filetransfer.identity.FileTransferNamespace.createInstance(FileTransferNamespace.java:58) at org.eclipse.ecf.core.identity.IDFactory.createID(IDFactory.java:267) at org.eclipse.ecf.filetransfer.identity.FileIDFactory.createFileID(FileIDFactory.java:96) at org.eclipse.ecf.filetransfer.identity.FileIDFactory.createFileID(FileIDFactory.java:73) at org.eclipse.equinox.internal.p2.repository.FileInfoReader.sendBrowseRequest(FileInfoReader.java:180) at org.eclipse.equinox.internal.p2.repository.FileInfoReader.getRemoteFiles(FileInfoReader.java:107) at org.eclipse.equinox.internal.p2.repository.FileInfoReader.getRemoteFile(FileInfoReader.java:123) at org.eclipse.equinox.internal.p2.repository.FileInfoReader.getLastModified(FileInfoReader.java:128) at org.eclipse.equinox.internal.p2.repository.RepositoryTransport.getLastModified(RepositoryTransport.java:224) at org.eclipse.equinox.internal.p2.repository.CacheManager.createCache(CacheManager.java:169) ... 33 more