[ 
https://issues.apache.org/jira/browse/FELIX-808?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12646900#action_12646900
 ] 

Guillaume Sauthier commented on FELIX-808:
------------------------------------------

:)

In fact, we found that issue when Felix is run on Windows.
JacORB tries to load a configuration file using different strategies:
1. use the TCCL.getResource()
2. if not found, tries the absolute filename

The problem is that the resource it tries to load from the TCCL is already the 
absolute file name (ie, under windows something like 'd:\path\to\my\resource').
So the call looks like this :
Thread.currentThread().getContextClassLoader().getResource("d:\path\to\my\resource");
The TCCL is a bundle ClassLoader of Felix with a 'DynamicImport-Packages *'.

This is where we fallback on the system classloader (not 100% sure) and we try 
to load d:\...\resource as a class (changing all . to / and adding a .class 
suffix :) ).


> R4SearchPolicyCore.searchDynamicImports() always loads a class even if the 
> object to load is a resource
> -------------------------------------------------------------------------------------------------------
>
>                 Key: FELIX-808
>                 URL: https://issues.apache.org/jira/browse/FELIX-808
>             Project: Felix
>          Issue Type: Bug
>    Affects Versions: felix-1.4.0
>            Reporter: eyindanga
>            Assignee: Richard S. Hall
>             Fix For: felix-1.4.1
>
>
> The method R4SearchPolicyCore.searchDynamicImports( IModule module, String 
> name, String pkgName, boolean isClass) always load a class by using the 
> current thrad class loader even if  the object to laod is a resource.
> This code may chek if the object is a class or a resource, and invoke the 
> coresponding method on the classloader.
>                // If there are no bundles providing exports for this
>                 // package and if the instigating class was not from a
>                 // bundle, then delegate to the parent class loader.
>                 // Otherwise, break out of loop and return null.
>                 boolean delegate = true;
>                 for (ClassLoader cl = classes[i].getClassLoader(); cl != 
> null; cl = cl.getClass().getClassLoader())
>                 {
>                     if (ContentClassLoader.class.isInstance(cl))
>                     {
>                         delegate = false;
>                         break;
>                     }
>                 }
>                 if (delegate)
>                 {
>                     return this.getClass().getClassLoader().loadClass(name);
>                 }

-- 
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