directory-api mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gregory Chanan <gcha...@cloudera.com>
Subject Upgrade Issues / Dealing with OSGI
Date Thu, 23 Apr 2015 23:25:28 GMT
I wanted to upgrade the LDAP API version of my application to pick up
https://issues.apache.org/jira/browse/DIRAPI-219.  Unfortunately, I hit
some problems, namely:

 java.lang.IllegalAccessError: tried to access field
org.apache.directory.api.ldap.codec.osgi.DefaultLdapCodecService.controlFactories
from class
org.apache.directory.api.ldap.codec.standalone.StandaloneLdapApiService

I tracked this down to upgrading from M21 to M22 (i.e. my code works with
M21, doesn't work with M22), where it looks like DefaultLdapCodecService is
now a superclass of StandaloneLdapApiService.  StackOverflow suggests this
can be caused by different class loaders:
http://stackoverflow.com/questions/3386662/illegalaccesserror-accessing-a-protected-method/3387520#3387520

Has anyone seen this?  Is there a suggested workaround?

FWIW I was able to get my application to work by adding:

    DefaultLdapCodecService dlcs = new DefaultLdapCodecService();
    LdapApiServiceFactory.initialize(dlcs);
before the problematic line:
    ds = new DefaultDirectoryService();
but I'm not sure what the implication of using DefaultLdapCodecService
compared to StandaloneLdapApiService (which is what gets loaded if you
don't manually initialize the LdapApiServiceFactory.

The application is Hadoop MiniKdc, see here:
https://github.com/apache/hadoop/blob/e3496499ecb8d220fba99dc5ed4c99c8f9e33bb1/hadoop-common-project/hadoop-minikdc/src/main/java/org/apache/hadoop/minikdc/MiniKdc.java#L324

Here's the entire stack trace (this is running in maven surefire):
java.lang.IllegalAccessError: tried to access field
org.apache.directory.api.ldap.codec.osgi.DefaultLdapCodecService.controlFactories
from class
org.apache.directory.api.ldap.codec.standalone.StandaloneLdapApiService
    at
org.apache.directory.api.ldap.codec.standalone.StandaloneLdapApiService.<init>(StandaloneLdapApiService.java:148)
    at
org.apache.directory.api.ldap.codec.standalone.StandaloneLdapApiService.<init>(StandaloneLdapApiService.java:142)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
    at java.lang.Class.newInstance0(Class.java:374)
    at java.lang.Class.newInstance(Class.java:327)
    at
org.apache.directory.api.ldap.codec.api.LdapApiServiceFactory.initialize(LdapApiServiceFactory.java:127)
    at
org.apache.directory.api.ldap.codec.api.LdapApiServiceFactory.getSingleton(LdapApiServiceFactory.java:89)
    at
org.apache.directory.server.core.DefaultDirectoryService.<init>(DefaultDirectoryService.java:150)
    at
org.apache.hadoop.minikdc.MiniKdc.initDirectoryService(MiniKdc.java:335)
    at org.apache.hadoop.minikdc.MiniKdc.start(MiniKdc.java:327)
    at
org.apache.hadoop.minikdc.KerberosSecurityTestcase.startMiniKdc(KerberosSecurityTestcase.java:49)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
    at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
    at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
    at
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
    at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
    at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at
org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:254)
    at
org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:149)
    at
org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
    at
org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
    at
org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
    at
org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message