sonatype / nexus-ruby-support

26 stars 7 forks source link

Used invalid URL-Path separator in RubyProxy remote requests on Windows #38

Closed keklabs closed 11 years ago

keklabs commented 11 years ago

The RubyProxy repository doesn´t work on windows platform, because internal use of java.io.File converts the File-Path representation to platform specific representation.

Paths like "/quick/Marshal.4.8/" are automatically converted to "\quick\Marshal.4.8\", but the internal code of Nexus org.sonatype.nexus.proxy.storage.remote.AbstractRemoteRepositoryStorage#getAbsoluteUrlFromBase(...) is using only "/" for correct URL construction.

The result URL could not be used for connection to remote repository because :

java.lang.IllegalArgumentException: Illegal character in path at index 20: http://rubygems.org/\quick\Marshal.4.8\z\zip-2.0.2.gemspec.rz
    at java.net.URI.create(Unknown Source) ~[na:1.7.0_25]
    at org.apache.http.client.methods.HttpGet.<init>(HttpGet.java:69) ~[httpclient-4.2.5.jar:4.2.5]
    at org.sonatype.nexus.proxy.storage.remote.httpclient.HttpClientRemoteStorage.retrieveItem(HttpClientRemoteStorage.java:169) ~[nexus-core-2.6.2-01.jar:2.6.2-01]
    at org.sonatype.nexus.proxy.repository.AbstractProxyRepository.doRetrieveRemoteItem(AbstractProxyRepository.java:1567) [nexus-core-2.6.2-01.jar:2.6.2-01]
    at org.sonatype.nexus.plugins.ruby.proxy.DefaultRubyProxyRepository.doRetrieveRemoteItem(DefaultRubyProxyRepository.java:172) ~[na:na]
    at org.sonatype.nexus.proxy.repository.AbstractProxyRepository.doRetrieveItem0(AbstractProxyRepository.java:1265) [nexus-core-2.6.2-01.jar:2.6.2-01]
    at org.sonatype.nexus.proxy.repository.AbstractProxyRepository.doRetrieveItem(AbstractProxyRepository.java:1121) [nexus-core-2.6.2-01.jar:2.6.2-01]
    at org.sonatype.nexus.proxy.repository.AbstractRepository.retrieveItem(AbstractRepository.java:832) ~[nexus-core-2.6.2-01.jar:2.6.2-01]
    at org.sonatype.nexus.proxy.repository.AbstractRepository.retrieveItem(AbstractRepository.java:657) ~[nexus-core-2.6.2-01.jar:2.6.2-01]
    at org.sonatype.nexus.plugins.ruby.proxy.DefaultRubyProxyRepository.retrieveItem(DefaultRubyProxyRepository.java:206) ~[na:na]
    at org.sonatype.nexus.proxy.router.DefaultRepositoryRouter.retrieveItem(DefaultRepositoryRouter.java:176) ~[nexus-core-2.6.2-01.jar:2.6.2-01]
    at org.sonatype.nexus.rest.AbstractResourceStoreContentPlexusResource.get(AbstractResourceStoreContentPlexusResource.java:173) ~[na:na]
    at org.sonatype.plexus.rest.resource.RestletResource.represent(RestletResource.java:269) ~[na:na]
    at org.sonatype.nexus.rest.NexusRestletResource.represent(NexusRestletResource.java:43) ~[na:na]

And the workaround - specify the URL of remote repository without ending "/" is not possible, because the "/" is automatically appended by Nexus before Repository configuration Save.