[ 
http://issues.apache.org/jira/browse/TAPESTRY-1020?page=comments#action_12422863
 ] 
            
Ben Sommerville commented on TAPESTRY-1020:
-------------------------------------------

The errors I get are:

**********************************************************
13:20:04,157 ERROR [STDERR] Failure to export classpath resource 
/dojo/__package__.js.
13:20:04,157 ERROR [STDERR]Exceptions:
13:20:04,173 ERROR [STDERR] org.apache.hivemind.ApplicationRuntimeException: 
Classpath resource '/dojo/__package__.js' does not exist.
13:20:04,173 ERROR [STDERR] 
org.apache.tapestry.asset.AssetService.service(AssetService.java:247)

**********************************************************
13:20:04,267 ERROR [STDERR] Failure to export classpath resource 
/dojo/../tapestry/form.js.
13:20:04,267 ERROR [STDERR] Exceptions:
13:20:04,267 ERROR [STDERR] org.apache.hivemind.ApplicationRuntimeException: 
Classpath resource '/dojo/../tapestry/form.js' does not exist.

On page I am viewing I get:
FATAL: Could not load 'tapestry.html'; last tried '__package__.js'
FATAL: Could not load 'tapestry.form'; last tried '__package__.js'


> AssetService cannot handle relative paths when asset is in jar
> --------------------------------------------------------------
>
>                 Key: TAPESTRY-1020
>                 URL: http://issues.apache.org/jira/browse/TAPESTRY-1020
>             Project: Tapestry
>          Issue Type: Bug
>          Components: Framework, JavaScript
>    Affects Versions: 4.1
>         Environment: Tapestry 4.1 head 21/7/06
> JBoss 4.0.4 GA
>            Reporter: Ben Sommerville
>         Assigned To: Jesse Kuhnert
>            Priority: Minor
>
> Dojo uses relative paths to load modules.  e.g. dojo/../tapestry/form.
> When these resources are stored within a jar, the Asset service cannot 
> resolve them.  I think it would work if they were part of the web resources 
> (since that may use a file resolver) but the classpath resolver does not find 
> them
> The AssetService needs to convert the supplied path to a cannonical form (no 
> back references) before it tries to load the resource.  
> I made a quick modification to the AssertService.translateCssPath method 
> which accomplishes this.  
> String translateCssPath(String path)
>    {
>         if (path == null) return null;
>         // Remove back references in path. 
>         if( path.indexOf("/../") >= 0 ) {
>             int start = path.indexOf("/../");
>             while( start > 0 ) {
>                 int parentStart = path.lastIndexOf("/", start-1);
>                 path = path.substring(0,parentStart+1) + 
> path.substring(start+4);
>                 start = path.indexOf("/../");
>             }
>         }
>         
>         // don't parse out actual css files
>         if (path.endsWith(".css")) return path;
>         
>         int index = path.lastIndexOf(".css");
>         if (index <= -1) return path;
>         
>         // now need to parse out whatever css file was referenced to get the 
> real path
>         int pathEnd = path.lastIndexOf("/", index);
>         if (pathEnd <= -1) return path;
>         
>         return path.substring(0, pathEnd + 1) + path.substring(index + 4, 
> path.length());
>     }
> That passes these tests
>     public void testRelativePaths() {
>         AssetService service = new AssetService();
>         assertEquals("/src", service.translateCssPath("/dojo/../src"));
>         assertEquals("src", service.translateCssPath("dojo/../src"));
>         assertEquals("/src", 
> service.translateCssPath("/dojo/blah/../../src"));
>         assertEquals("src", service.translateCssPath("dojo/blah/../../src"));
>         assertEquals("/src", 
> service.translateCssPath("/dojo/../blah/../src"));
>         assertEquals("src", service.translateCssPath("dojo/../blah/../src"));
>         assertEquals("/src/", service.translateCssPath("/dojo/../src/"));
>         assertEquals("src/", service.translateCssPath("dojo/../src/"));
>         assertEquals("/", service.translateCssPath("/dojo/../"));
>         assertEquals("", service.translateCssPath("dojo/../"));
>         assertEquals("../dojo", service.translateCssPath("../dojo"));
>         assertEquals("/../dojo", service.translateCssPath("/../dojo"));
>     }

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

        

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to