[ http://mc4j.org/jira/browse/STS-389?page=comments#action_10731 ] 
            
Jeppe Cramon commented on STS-389:
----------------------------------

This has been changed quite a bit for release 1.5 so if you could try out 1.5 
(out can get it from the trunk of SVN) and see if it fixes your problem?

Jeppe

> Stripes ActionResolver doesn't work with JNLPClassLoader in Jetty 6.1
> ---------------------------------------------------------------------
>
>                 Key: STS-389
>                 URL: http://mc4j.org/jira/browse/STS-389
>             Project: Stripes
>          Issue Type: Improvement
>          Components: ActionBean Dispatching
>    Affects Versions: Release 1.4.3
>         Environment: MacOSX; Windows XP with JDK 6.0
>            Reporter: Sean Doyle
>         Assigned To: Tim Fennell
>
> When attempting to load Stripes from inside Jetty which was in turn loaded 
> via JNLP (Java Web Start)  ResolverUtil generates errors of the following 
> form:
>  INFO [javawsApplicationMain] (Log.java:166) - Checking URL 
> '/DDL/app/jsp-api.jar' for instances of 
> net.sourceforge.stripes.action.ActionBean
> ERROR [javawsApplicationMain] (Log.java:144) - Could not search jar file 
> '/DDL/app/jsp-api.jar' for implementations of 
> net.sourceforge.stripes.action.ActionBeandue to an IOException: 
> /DDL/app/jsp-api.jar (No such file or directory)
> [This is true of all jar files on the path]
> The main issue is that loadImplementationsInJar expects the location to be a 
> file reference which is not available via the JNLPClassLoader. Instead - 
> files are accessed in the cache via the URL.,
> A proposed fix follows (I know that this is all getting upgraded for 1.5 and 
> will be cleaner than this):
> In loadImplementationsFromContextClassloader - add the following logic:
> // Only process the URL if it matches one of our filter strings
>                 if ( matchesAny(path, locationFilters) ) {
>                     log.info("Checking URL '", path, "' for instances of ", 
> parentType.getName());
>                     if (location.isDirectory()) {
>                         loadImplementationsInDirectory(parentType, null, 
> location);
>                     }
>                     else {
>                       if (path.indexOf("http")== -1)
>                               loadImplementationsInJar(parentType, null, 
> path);
>                         else
>                               loadImplementationsInJNLPJar(parentType, null, 
> url);
>                     }
>                 }
> and the new method loadImplementionsInJNLPJar is 
>     private void loadImplementationsInJNLPJar(Class<? extends T> parentType,
>                                             InputStream inputStream,
>                                             URL url) {
>         try {
>             JarEntry entry;
>             HttpURLConnection httpConnection = (HttpURLConnection) 
> url.openConnection();
>             httpConnection.setDoOutput (true);
>             httpConnection.setRequestMethod ("GET"); 
>             httpConnection.connect();
>           
>            
>             if (inputStream == null) inputStream =  
> httpConnection.getInputStream();
>             int code = httpConnection.getResponseCode (  ) ; 
>             if  ( (code  >= 200) && (code <  300 ))   {   
>                   JarInputStream jarStream = new JarInputStream(inputStream);
>       
>                   while ( (entry = jarStream.getNextJarEntry() ) != null) {
>                       String name = entry.getName();
>                       if (!entry.isDirectory() && name.endsWith(".class")) {
>                           if (matchesAny(name, this.packageFilters)) {
>                               addIfAssignableTo(parentType, name);
>                           }
>                       }
>                   }
>  
>                   } 
>             else{
>               log.error("Unable to search url " + url + " for implementations 
> of " +
>                               parentType.getName() + " due to http status 
> code " + code +
>                               httpConnection.getResponseMessage());
>             }
>         }
>         catch (IOException ioe) {
>             log.error("Could not search url '", url, "' for implementations 
> of ",
>                       parentType.getName(), "due to an IOException: ", 
> ioe.getMessage());
>         }
>     }

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

        

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Stripes-development mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/stripes-development

Reply via email to