[ 
https://issues.apache.org/jira/browse/COMPRESS-552?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17344551#comment-17344551
 ] 

Björn Michael edited comment on COMPRESS-552 at 5/14/21, 2:19 PM:
------------------------------------------------------------------

Since {{org.osgi.framework.BundleReference}} is an interface I'd suggest this 
version at {{OsgiUtils}}
{code:java}
private static boolean isBundleReference(Class<?> clazz) {
    Class<?> c = clazz;
    while (c != null) {
        for (Class<?> ifc : c.getInterfaces()) {
            if (ifc.getName().equals("org.osgi.framework.BundleReference")) {
                return true;
            }
        }
        c = c.getSuperclass();
    }
    return false;
}{code}
Because Eclipse classloader 
({{org.eclipse.osgi.internal.loader.EquinoxClassLoader}})  has following class 
hierarchy
{noformat}
class ModuleClassLoader extends java.lang.ClassLoader implements BundleReference
class EquinoxClassLoader extends ModuleClassLoader
{noformat}
current implementation evaluates to *false*.


was (Author: mtomcat_daobi):
Since {{org.osgi.framework.BundleReference}} is an interface I'll recommend 
this version at {{OsgiUtils}}
{code:java}
private static boolean isBundleReference(Class<?> clazz) {
    Class<?> c = clazz;
    while (c != null) {
        for (Class<?> ifc : c.getInterfaces()) {
            if (ifc.getName().equals("org.osgi.framework.BundleReference")) {
                return true;
            }
        }
        c = c.getSuperclass();
    }
    return false;
}{code}
Because Eclipse classloader 
({{org.eclipse.osgi.internal.loader.EquinoxClassLoader}})  has following class 
hierarchy
{noformat}
class ModuleClassLoader extends java.lang.ClassLoader implements BundleReference
class EquinoxClassLoader extends ModuleClassLoader
{noformat}
current implementation evaluates to *false*.

> OSGI check broken - try to load class BundleEvent always fails
> --------------------------------------------------------------
>
>                 Key: COMPRESS-552
>                 URL: https://issues.apache.org/jira/browse/COMPRESS-552
>             Project: Commons Compress
>          Issue Type: Bug
>          Components: Compressors
>    Affects Versions: 1.20
>            Reporter: Björn Michael
>            Priority: Major
>             Fix For: 1.21
>
>
> There is a check for running in OSGI env. in {{ZstdUtils}}, {{BrotliUtils}}, 
> {{LZMAUtils}} and {{XZUtils}} like this:
> {code:java}
> static {
>     cachedZstdAvailability = CachedAvailability.DONT_CACHE;
>     try {
>         Class.forName("org.osgi.framework.BundleEvent");
>     } catch (final Exception ex) { // NOSONAR
>         setCacheZstdAvailablity(true);
>     }
> }
> {code}
> Loading the class {{org.osgi.framework.BundleEvent}} always fails because 
> {{Import-Package}} directive for {{org.osgi.framework}} is missing in 
> _MANIFEST.MF_. Or it requires another more sophisticated approaches 
> ([https://stackoverflow.com/q/5879040/1061929]).
> Tested with Eclipse 4.14 (org.eclipse.osgi_3.15.100.v20191114-1701.jar)



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to