[
https://issues.apache.org/jira/browse/FELIX-953?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12675980#action_12675980
]
Richard S. Hall commented on FELIX-953:
---------------------------------------
IWire could be for an Import-Package (R4Wire) or a Require-Bundle
(R4WireModule). If a class is not found from an Import-Package, then an
exception is thrown because this must terminate the search. If a class is not
found from a Require-Bundle, then null is returned because the search must
continue.
Regarding, IModule.getClassByDelegation() (this name will probably still change
as part of my refactoring), I am not necessarily against making this always
return an exception, but I will have to look into it some more. The reason we
are a little inconsistent here is because we have boiled down two abstractions
into one in the trunk, we merged IContentLoader and IModule and I believe these
two handled the situation differently before. I don't think IModule.getClass()
ever threw an exception previously.
In short, I think you are correct we probably need to make sure we have this
issue handled in a reasonable way. So, I will look into it as part of the
ongoing work for FELIX-851.
> Bundle#loadClass sometimes return null instead of throwing a CNFE
> -----------------------------------------------------------------
>
> Key: FELIX-953
> URL: https://issues.apache.org/jira/browse/FELIX-953
> Project: Felix
> Issue Type: Bug
> Components: Framework
> Reporter: Guillaume Nodet
> Priority: Blocker
> Attachments: FELIX-953.patch
>
>
> Here is a patch:
> {code}
> Index: src/main/java/org/apache/felix/framework/Felix.java
> ===================================================================
> --- src/main/java/org/apache/felix/framework/Felix.java (revision 746347)
> +++ src/main/java/org/apache/felix/framework/Felix.java (working copy)
> @@ -1338,7 +1338,12 @@
> throw new ClassNotFoundException(name, ex);
> }
> }
> - return bundle.getCurrentModule().getClassByDelegation(name);
> + Class clazz = bundle.getCurrentModule().getClassByDelegation(name);
> + if (clazz == null)
> + {
> + throw new ClassNotFoundException(name);
> + }
> + return clazz;
> }
>
> /**
> {code}
> I'm wondering if there any reason why ModuleImpl#getClassByDelegation(String)
> returns null instead of throwing a NPE.
> Browsing through the code, it seems there are several places where a null
> value is checked, then a CNFE thrown.
> This would also avoid possible NPE in felix code as in
> Felix#createBundleActivator.
> I think it would be nice to iron the definition of
> IModule#getClassByDelegation to either remove the thrown CNFE or never
> returns null, as currently both can happen.
> The IWire interface has exactly the same problem.
> I will try to come up with a patch which will never return a null value for
> both interfaces.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.