[ 
https://issues.apache.org/jira/browse/COCOON-2022?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12481345
 ] 

Jörg Heinicke commented on COCOON-2022:
---------------------------------------

Ok, can you debug it? I especially wonder why it ends in "file:/test.zip" as 
the debug output added by Jorg clearly says:

[DEBUG] Resolving 'file://test.zip' with base 'null' in context ...
[DEBUG] Resolved to systemID : file://test.zip
[DEBUG] Creating source object for file://test.zip

As the "inner" uri "file://test.zip" is resolved on its own and into a 
different Source object the actual error is probably not even in ZipSource but 
somewhere else. The failing check on ZipSource.getURI() only calls getURI() on 
the inner Source object. This inner Source object is not manipulated in any 
way. So maybe also the test

    public void testURIHandling() throws Exception {
        String uri = "file://test.zip";
        Source source;
        SourceResolver resolver = null;
        try {
            resolver = (SourceResolver) 
getManager().lookup(SourceResolver.ROLE);
            source = resolver.resolveURI(uri);
        } catch (ServiceException se) {
            throw new SourceException("SourceResolver is not available.", se);
        } finally {
            getManager().release(resolver);
        }
        assertEquals("Uri is wrong.", uri, source.getURI());
    }

would fail for you?

> broken URI handling in ZipSource
> --------------------------------
>
>                 Key: COCOON-2022
>                 URL: https://issues.apache.org/jira/browse/COCOON-2022
>             Project: Cocoon
>          Issue Type: Bug
>          Components: * Cocoon Core
>    Affects Versions: 2.1.10
>            Reporter: Jörg Heinicke
>         Assigned To: Jörg Heinicke
>            Priority: Minor
>
> On behalf of Leonid Geller: 
> http://marc.theaimsgroup.com/?t=117337275500004&r=1&w=4:
> 1. Bug in org.apache.cocoon.components.source.impl.ZipSourceFactory, on this 
> line:
>         // Get protocol. Protocol is configurable via cocoon.xconf
>         final String protocol = location.substring(0, protocolEnd - 1);
> Obviously it should be location.substring(0, protocolEnd). This is what 
> causes zip to be truncated to "zi".
> 2. When using a SYSTEM identifier with relative DTD path, the XML parser will 
> look for the file relative to the URI of the zipped source, 
> zip:archive.zip!/source.xml which is obviously going to fail.
> Here, the solution is to have the source implementation class (in this case 
> org.apache.cocoon.components.source.impl.ZipSource) to change getURI method 
> to return source.xml based on archive.zip location, w/o the zip protocol. 
> Current implementation:
>       return this.protocol + this.archive.getURI() + "!/" + this.filePath;
> is not going to work. Something like this will:
>       int iZipIdx = this.archive.getURI().lastIndexOf("/");
>       if (iZipIdx < 0) iZipIdx = 0;
>       return this.archive.getURI().substring(0,iZipIdx)+"/"+ this.filePath;

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to