You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@archiva.apache.org by "Aaron Hamid (JIRA)" <ji...@codehaus.org> on 2009/04/21 19:41:45 UTC

[jira] Issue Comment Edited: (MRM-935) Archiva doesn't supports artifact with SNAPSHOT

    [ http://jira.codehaus.org/browse/MRM-935?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=173689#action_173689 ] 

Aaron Hamid edited comment on MRM-935 at 4/21/09 12:41 PM:
-----------------------------------------------------------

It looks like these are the lines in MetadataTools.gatherSnapshotVersions causing the above exception:

String baseVersion = VersionUtil.getBaseVersion( reference.getVersion() );
baseVersion = baseVersion.substring( 0, baseVersion.indexOf( VersionUtil.SNAPSHOT ) - 1 );

if the indexOf returns 0, which I assume it will when the version is just "SNAPSHOT" (although I have to say I'm not really sure what the various getXXXVersion() methods are really doing), then this will clearly lead to the index out of bounds.  If this is indeed a legitimate scenario, then the above code just needs to handle that case (e.g. set baseVersion to the empty string, "").  It appears that the baseVersion is only thereafter used if there is a timestamp on the snapshot to reconstruct a version string (in which case the string will be created incorrectly if the baseVersion is empty).  Presumably this code would not get invoked if unique snapshots are off.  I assume that it would be desirable to fix that case (timestamped "SNAPSHOT" versions) as well.

      was (Author: ahamid):
    It looks like these are the lines causing the above exception:

String baseVersion = VersionUtil.getBaseVersion( reference.getVersion() );
baseVersion = baseVersion.substring( 0, baseVersion.indexOf( VersionUtil.SNAPSHOT ) - 1 );

if the indexOf returns 0, which I assume it will when the version is just "SNAPSHOT" (although I have to say I'm not really sure what the various getXXXVersion() methods are really doing), then this will clearly lead to the index out of bounds.  If this is indeed a legitimate scenario, then the above code just needs to handle that case (e.g. set baseVersion to the empty string, "").  It appears that the baseVersion is only thereafter used if there is a timestamp on the snapshot to reconstruct a version string (in which case the string will be created incorrectly if the baseVersion is empty).  Presumably this code would not get invoked if unique snapshots are off.  I assume that it would be desirable to fix that case (timestamped "SNAPSHOT" versions) as well.
  
> Archiva doesn't supports artifact with <version>SNAPSHOT</version>
> ------------------------------------------------------------------
>
>                 Key: MRM-935
>                 URL: http://jira.codehaus.org/browse/MRM-935
>             Project: Archiva
>          Issue Type: Bug
>          Components: repository scanning
>    Affects Versions: 1.1.1
>            Reporter: Michal Stochmialek
>             Fix For: 1.x
>
>
> We are using SNAPSHOT version of axiom library. In trunk axiom developers are using "SNAPSHOT" string as a version
> (not a X.X.X-SNAPSHOT, but just SNAPSHOT). Link below.
> http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/pom.xml?view=markup
> Archiva doesn't support this kind of version. During repository synchronization and also during downloading the artifact
> archiva throws exceptions:
> {noformat}
> 2008-09-08 11:00:39,109 [pool-2-thread-1] ERROR org.apache.maven.archiva.repository.scanner.functors.ConsumerProcessFileClosur
> e  - Consumer [repository-purge] had an error when processing file [/home/maven.repo/data/repositories/snapshots/org/apache/ws
> /commons/axiom/axiom-tests/SNAPSHOT/axiom-tests-20070912.093446-2.pom]: String index out of range: -1
> java.lang.StringIndexOutOfBoundsException: String index out of range: -1
>         at java.lang.String.substring(String.java:1938)
>         at org.apache.maven.archiva.repository.content.FilenameParser.expect(FilenameParser.java:107)
>         at org.apache.maven.archiva.repository.content.DefaultPathParser.toArtifactReference(DefaultPathParser.java:119)
>         at org.apache.maven.archiva.repository.content.AbstractDefaultRepositoryContent.toArtifactReference(AbstractDefaultRepositoryContent.java:51)
>         at org.apache.maven.archiva.repository.content.ManagedDefaultRepositoryContent.toArtifactReference(ManagedDefaultRepositoryContent.java:323)
>         at org.apache.maven.archiva.consumers.core.repository.DaysOldRepositoryPurge.process(DaysOldRepositoryPurge.java:81)
>         at org.apache.maven.archiva.consumers.core.repository.RepositoryPurgeConsumer.processFile(RepositoryPurgeConsumer.java:186)
>         at org.apache.maven.archiva.repository.scanner.functors.ConsumerProcessFileClosure.execute(ConsumerProcessFileClosure.java:51)
>         at org.apache.commons.collections.functors.IfClosure.execute(IfClosure.java:117)
>         at org.apache.commons.collections.CollectionUtils.forAllDo(CollectionUtils.java:388)
>         at org.apache.maven.archiva.repository.scanner.RepositoryScannerInstance.directoryWalkStep(RepositoryScannerInstance.java:137)
>         at org.codehaus.plexus.util.DirectoryWalker.fireStep(DirectoryWalker.java:174)
>         at org.codehaus.plexus.util.DirectoryWalker.scanDir(DirectoryWalker.java:392)
>         at org.codehaus.plexus.util.DirectoryWalker.scanDir(DirectoryWalker.java:386)
>         at org.codehaus.plexus.util.DirectoryWalker.scanDir(DirectoryWalker.java:386)
>         at org.codehaus.plexus.util.DirectoryWalker.scanDir(DirectoryWalker.java:386)
>         at org.codehaus.plexus.util.DirectoryWalker.scanDir(DirectoryWalker.java:386)
>         at org.codehaus.plexus.util.DirectoryWalker.scanDir(DirectoryWalker.java:386)
>         at org.codehaus.plexus.util.DirectoryWalker.scanDir(DirectoryWalker.java:386)
>         at org.codehaus.plexus.util.DirectoryWalker.scanDir(DirectoryWalker.java:386)
>         at org.codehaus.plexus.util.DirectoryWalker.scan(DirectoryWalker.java:345)
>         at org.apache.maven.archiva.repository.scanner.DefaultRepositoryScanner.scan(DefaultRepositoryScanner.java:122)
>         at org.apache.maven.archiva.repository.scanner.DefaultRepositoryScanner.scan(DefaultRepositoryScanner.java:66)
>         at org.apache.maven.archiva.scheduled.executors.ArchivaRepositoryScanningTaskExecutor.executeTask(ArchivaRepositoryScanningTaskExecutor.java:111)
>         at org.codehaus.plexus.taskqueue.execution.ThreadedTaskQueueExecutor$ExecutorRunnable$1.run(ThreadedTaskQueueExecutor.java:116)
>         at edu.emory.mathcs.backport.java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:442)
>         at edu.emory.mathcs.backport.java.util.concurrent.FutureTask.run(FutureTask.java:176)
>         at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:987)
>         at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:528)
>         at java.lang.Thread.run(Thread.java:619)
> {noformat}
> {noformat}
> HTTP ERROR: 500
> String index out of range: -1
> RequestURI=/archiva/repository/snapshots/org/apache/ws/commons/axiom/axiom-impl/SNAPSHOT/axiom-impl-20070911.125712-1.pom
> Caused by:
> java.lang.StringIndexOutOfBoundsException: String index out of range: -1
> 	at java.lang.String.substring(String.java:1938)
> 	at org.apache.maven.archiva.repository.content.FilenameParser.expect(FilenameParser.java:107)
> 	at org.apache.maven.archiva.repository.content.DefaultPathParser.toArtifactReference(DefaultPathParser.java:119)
> 	at org.apache.maven.archiva.repository.content.RepositoryRequest.toArtifactReference(RepositoryRequest.java:79)
> 	at org.apache.maven.archiva.webdav.ArchivaDavResourceFactory.fetchContentFromProxies(ArchivaDavResourceFactory.java:513)
> 	at org.apache.maven.archiva.webdav.ArchivaDavResourceFactory.doGet(ArchivaDavResourceFactory.java:423)
> 	at org.apache.maven.archiva.webdav.ArchivaDavResourceFactory.createResource(ArchivaDavResourceFactory.java:251)
> 	at org.apache.maven.archiva.webdav.RepositoryServlet.service(RepositoryServlet.java:117)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
> 	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
> 	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093)
> 	at com.opensymphony.webwork.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:189)
> 	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
> 	at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:39)
> 	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
> 	at com.opensymphony.webwork.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:88)
> 	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
> 	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
> 	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
> 	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
> 	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:722)
> 	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:404)
> 	at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)
> 	at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
> 	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
> 	at org.mortbay.jetty.Server.handle(Server.java:324)
> 	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
> 	at org.mortbay.jetty.ajp.Ajp13Connection.access$2700(Ajp13Connection.java:42)
> 	at org.mortbay.jetty.ajp.Ajp13Connection$RequestHandler.headerComplete(Ajp13Connection.java:221)
> 	at org.mortbay.jetty.ajp.Ajp13Parser.parseNext(Ajp13Parser.java:474)
> 	at org.mortbay.jetty.ajp.Ajp13Parser.parseAvailable(Ajp13Parser.java:142)
> 	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
> 	at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228)
> 	at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:450)
> {noformat}
> The issue is critical. Archiva should allow at least downloading.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira