[ https://issues.apache.org/jira/browse/SHIRO-537?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16697774#comment-16697774 ]
Steinar Bang commented on SHIRO-537: ------------------------------------ I tried to use the workaround mentioned in this bug, and in the linked-to stackoverflow answer, but the activator still failed with the same stack trace. With the workaround in place, the activate method looked like this: {code:java} @Activate public void activate(BundleContext ctx) { BundleWiring wiring = ctx.getBundle().adapt(BundleWiring.class); ClassLoader bundleClassloader = wiring.getClassLoader(); Thread current = Thread.currentThread(); ClassLoader originalClassloader = current.getContextClassLoader(); current.setContextClassLoader(bundleClassloader); try { IniWebEnvironment webenvironment = new IniWebEnvironment(); webenvironment.setIni(INI_FILE); webenvironment.setServletContext(getServletContext()); webenvironment.init(); DefaultWebSecurityManager securityManager = (DefaultWebSecurityManager) webenvironment.getSecurityManager(); UkelonnRealm realm = createRealmProgramaticallyBecauseOfShiroIniClassCastException(); securityManager.setRealm(realm); setSecurityManager(securityManager); setFilterChainResolver(webenvironment.getFilterChainResolver()); } finally { current.setContextClassLoader(originalClassloader); } } {code} I've debugged into the activator, using remote debugging from eclipse into apache karaf. And I have verified that a BundleContext is injected, and a BundleWiring is successfully retrieved, and the classloaders are successfully retrieved and replaced. The activator fails (as before adding the workaround), when the IniWebEnvironment() constructor tries to create a WebIniSecurityManagerFactory instance using reflection. The stack trace in karaf.log with the workaround in place, is: {noformat} 2018-11-24T11:48:41,006 | ERROR | Thread-50 | security | 171 - no.priv.bang.ukelonn.web.security - 1.0.0.SNAPSHOT | [no.priv.bang.ukelonn.web.security.UkelonnShiroFilter(9)] The activate method has thrown an exception java.lang.NoClassDefFoundError: org/apache/shiro/web/config/WebIniSecurityManagerFactory at org.apache.shiro.web.env.IniWebEnvironment.<init>(IniWebEnvironment.java:60) ~[?:?] at no.priv.bang.ukelonn.web.security.UkelonnShiroFilter.activate(UkelonnShiroFilter.java:67) ~[?:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?] at java.lang.reflect.Method.invoke(Method.java:498) ~[?:?] at org.apache.felix.scr.impl.inject.BaseMethod.invokeMethod(BaseMethod.java:229) ~[179:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.inject.BaseMethod.access$500(BaseMethod.java:39) ~[179:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.inject.BaseMethod$Resolved.invoke(BaseMethod.java:650) ~[179:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.inject.BaseMethod.invoke(BaseMethod.java:506) [179:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.inject.ActivateMethod.invoke(ActivateMethod.java:307) [179:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.inject.ActivateMethod.invoke(ActivateMethod.java:299) [179:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.manager.SingleComponentManager.createImplementationObject(SingleComponentManager.java:298) [179:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.manager.SingleComponentManager.createComponent(SingleComponentManager.java:109) [179:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:906) [179:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:879) [179:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:823) [179:org.apache.felix.scr:2.0.12] at org.apache.felix.framework.ServiceRegistrationImpl.getFactoryUnchecked(ServiceRegistrationImpl.java:347) [?:?] at org.apache.felix.framework.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:247) [?:?] at org.apache.felix.framework.ServiceRegistry.getService(ServiceRegistry.java:350) [?:?] at org.apache.felix.framework.Felix.getService(Felix.java:3737) [?:?] at org.apache.felix.framework.BundleContextImpl.getService(BundleContextImpl.java:470) [?:?] at org.ops4j.pax.web.extender.whiteboard.internal.tracker.AbstractTracker.addingService(AbstractTracker.java:168) [242:org.ops4j.pax.web.pax-web-extender-whiteboard:6.0.9] at org.ops4j.pax.web.extender.whiteboard.internal.tracker.AbstractTracker.addingService(AbstractTracker.java:41) [242:org.ops4j.pax.web.pax-web-extender-whiteboard:6.0.9] at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:941) [?:?] at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:870) [?:?] at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256) [?:?] at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229) [?:?] at org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:901) [?:?] at org.apache.felix.framework.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:990) [?:?] at org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:838) [?:?] at org.apache.felix.framework.EventDispatcher.fireServiceEvent(EventDispatcher.java:545) [?:?] at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:4595) [?:?] at org.apache.felix.framework.Felix.registerService(Felix.java:3587) [?:?] at org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:348) [?:?] at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:887) [179:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:874) [179:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.manager.RegistrationManager.changeRegistration(RegistrationManager.java:132) [179:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.manager.AbstractComponentManager.registerService(AbstractComponentManager.java:941) [179:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:741) [179:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.manager.AbstractComponentManager.enableInternal(AbstractComponentManager.java:675) [179:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.manager.AbstractComponentManager.enable(AbstractComponentManager.java:430) [179:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.manager.ConfigurableComponentHolder.enableComponents(ConfigurableComponentHolder.java:657) [179:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.BundleComponentActivator.initialEnable(BundleComponentActivator.java:341) [179:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.Activator.loadComponents(Activator.java:390) [179:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.Activator.access$200(Activator.java:54) [179:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.Activator$ScrExtension.start(Activator.java:265) [179:org.apache.felix.scr:2.0.12] at org.apache.felix.utils.extender.AbstractExtender.createExtension(AbstractExtender.java:254) [179:org.apache.felix.scr:2.0.12] at org.apache.felix.utils.extender.AbstractExtender.modifiedBundle(AbstractExtender.java:227) [179:org.apache.felix.scr:2.0.12] at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:482) [?:?] at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:415) [?:?] at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:232) [?:?] at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:444) [?:?] at org.apache.felix.framework.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:915) [?:?] at org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:834) [?:?] at org.apache.felix.framework.EventDispatcher.fireBundleEvent(EventDispatcher.java:516) [?:?] at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4579) [?:?] at org.apache.felix.framework.Felix.startBundle(Felix.java:2174) [?:?] at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998) [?:?] at org.apache.karaf.bundle.core.internal.BundleWatcherImpl.run(BundleWatcherImpl.java:125) [22:org.apache.karaf.bundle.core:4.1.5] at java.lang.Thread.run(Thread.java:748) [?:?] {noformat} > Class load issue in OSGI in ClassUtils > -------------------------------------- > > Key: SHIRO-537 > URL: https://issues.apache.org/jira/browse/SHIRO-537 > Project: Shiro > Issue Type: Bug > Affects Versions: 1.2.3 > Environment: OSGi Felix 4.0.3 > Reporter: Tom Nelson > Priority: Major > > I had the same issue that is described in: > http://stackoverflow.com/questions/20653146/how-to-load-class-in-an-osgi-e4-environment-while-using-shiro > where it was suggested a bug was entered but never was, so here it is. A > similar workaround worked for me: > Thread currentThread = Thread.currentThread(); > ClassLoader originalCl = currentThread.getContextClassLoader(); > try { > Class<?> clazz = ((InfrastructureServer) > server).getBundleContext().getBundle() > > .loadClass(CustomRolePermissionResolver.class.getName()); > ClassLoader bundleClassLoader = clazz.getClassLoader(); > currentThread.setContextClassLoader(bundleClassLoader); > webappContext.deploy(httpServer); > } catch (ClassNotFoundException e) { > // TODO Auto-generated catch block > e.printStackTrace(); > } finally { > currentThread.setContextClassLoader(originalCl); > } > In addition, commons-collections 3.2.1 must be used in an OSGi environment, I > suggest bumping your dependency. -- This message was sent by Atlassian JIRA (v7.6.3#76005)