Uploaded image for project: 'Felix'
  1. Felix
  2. FELIX-2762

Substring parser incorrectly disallowing use of parentheses characters

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Minor
    • Resolution: Fixed
    • framework-3.0.7
    • framework-4.0.0
    • Framework
    • None

    Description

      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)

      Attachments

        Activity

          People

            rickhall Richard S. Hall
            mpetritsch Michael Petritsch
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: