[
https://issues.apache.org/jira/browse/FELIX-2762?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Richard S. Hall resolved FELIX-2762.
------------------------------------
Resolution: Fixed
Assignee: Richard S. Hall
Parentheses characters can now be used in substrings, which should solve this
issue since it will no longer throw an IllegalArgumentException, which means
the dynamic import will fail due to finding no providers and a CNFE will be
thrown.
Please close this issue if you are satisfied. Thanks.
> Substring parser incorrectly disallowing use of parentheses characters
> ----------------------------------------------------------------------
>
> Key: FELIX-2762
> URL: https://issues.apache.org/jira/browse/FELIX-2762
> Project: Felix
> Issue Type: Bug
> Components: Framework
> Affects Versions: framework-3.0.7
> Reporter: Michael Petritsch
> Assignee: Richard S. Hall
> Priority: Minor
> Fix For: framework-4.0.0
>
>
> When a bundle is trying to load a class with a classname that contains a
> perenthesis felix is throwing an IllegalArgumentException. Now usually the
> bundle trying to load the class would catch a "ClassNotFoundException". Other
> classLoaders (or at least sun.misc.Launcher.AppClassLoader) are throwing a
> ClassNotFoundException if the classname contains a parenthesis.
> Even if it's illegal to have parentheses in classnames some bundles still
> might try to load such classnames (e.g. due to a bug). So they could stop
> working in felix if they are catching a ClassNotFoundException even though
> they worked well before with different classloaders.
> Here is the stacktrace caused by a bundle that fits the category mentioned
> above:
> java.lang.IllegalArgumentException: Illegal value: Document doc =
> element.getOwnerDocument();
> at
> org.apache.felix.framework.capabilityset.SimpleFilter.parseSubstring(SimpleFilter.java:399)
> at
> org.apache.felix.framework.util.manifestparser.RequirementImpl.convertToFilter(RequirementImpl.java:162)
> at
> org.apache.felix.framework.util.manifestparser.RequirementImpl.<init>(RequirementImpl.java:49)
> at
> org.apache.felix.framework.Felix$FelixResolver.isAllowedDynamicImport(Felix.java:4139)
> at org.apache.felix.framework.Felix$FelixResolver.resolve(Felix.java:4029)
> at
> org.apache.felix.framework.ModuleImpl.searchDynamicImports(ModuleImpl.java:1367)
> at
> org.apache.felix.framework.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:723)
> at org.apache.felix.framework.ModuleImpl.access$200(ModuleImpl.java:73)
> at
> org.apache.felix.framework.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1690)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
> at
> org.apache.felix.framework.ModuleImpl.getClassByDelegation(ModuleImpl.java:634)
> at org.apache.felix.framework.Felix.loadBundleClass(Felix.java:1594)
> at org.apache.felix.framework.BundleImpl.loadClass(BundleImpl.java:887)
> at
> org.ops4j.pax.swissbox.core.BundleClassLoader.findClass(BundleClassLoader.java:176)
> at
> org.ops4j.pax.swissbox.core.BundleClassLoader.loadClass(BundleClassLoader.java:194)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
> at org.milyn.util.ClassUtil.forName(ClassUtil.java:82)
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira