[ https://issues.apache.org/jira/browse/FELIX-3907?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13589801#comment-13589801 ]
Richard S. Hall commented on FELIX-3907: ---------------------------------------- We could create an internal method that continues to return the class loader in this case, but this is really just trying to address the symptoms rather than the cause. The fact that you have threads still running and expecting proper behavior from classes on a refreshed (possibly uninstalled) bundle is a major bug you need to resolve. Regarding throwing a "good" exception, I've looked into trying to throw a "good" exception in these situations and it turned out to be more difficult than it sounds, which is why we still don't do it. > NullPointerException in BundleWiringImpl when m_disposed is true. > ----------------------------------------------------------------- > > Key: FELIX-3907 > URL: https://issues.apache.org/jira/browse/FELIX-3907 > Project: Felix > Issue Type: Bug > Components: Framework > Affects Versions: framework-4.2.0 > Environment: Windows > Reporter: Jad Naous > > NullPointerException caused by lines 1472-1474 of > {{org.apache.felix.framework.BundleWiringImpl}} when {{this.m_disposed == > true}}. I don't know why {{this.m_disposed}} is true, but I'm guessing it's > some sort of race condition. Stack trace follows: > {noformat} > ( Thread-5) [DEBUG] ntegration.NeratiDeployer > java.lang.NullPointerException: null > ( Thread-5) [DEBUG] ntegration.NeratiDeployer at > org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1472) > ~[felix.jar:na] > ( Thread-5) [DEBUG] ntegration.NeratiDeployer at > org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:75) > ~[felix.jar:na] > ( Thread-5) [DEBUG] ntegration.NeratiDeployer at > org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1923) > ~[felix.jar:na] > ( Thread-5) [DEBUG] ntegration.NeratiDeployer at > java.lang.ClassLoader.loadClass(ClassLoader.java:247) ~[na:1.6.0_37] > ( Thread-5) [DEBUG] ntegration.NeratiDeployer at > java.lang.Class.getDeclaredFields0(Native Method) ~[na:1.6.0_37] > ( Thread-5) [DEBUG] ntegration.NeratiDeployer at > java.lang.Class.privateGetDeclaredFields(Class.java:2291) ~[na:1.6.0_37] > ( Thread-5) [DEBUG] ntegration.NeratiDeployer at > java.lang.Class.getDeclaredField(Class.java:1880) ~[na:1.6.0_37] > ( Thread-5) [DEBUG] ntegration.NeratiDeployer at > com.nerati.agent.events.RuntimeRecording.getClassId(RuntimeRecording.java:156) > ~[agent-main-0.0.5-SNAPSHOT.jar:0.0.5-SNAPSHOT] > ( Thread-5) [DEBUG] ntegration.NeratiDeployer at > com.nerati.agent.events.RuntimeRecording.writeAsJson(RuntimeRecording.java:118) > ~[agent-main-0.0.5-SNAPSHOT.jar:0.0.5-SNAPSHOT] > ( Thread-5) [DEBUG] ntegration.NeratiDeployer at > com.nerati.agent.client.ControllerClient.processRequest(ControllerClient.java:160) > ~[agent-main-0.0.5-SNAPSHOT.jar:0.0.5-SNAPSHOT] > ( Thread-5) [DEBUG] ntegration.NeratiDeployer at > com.nerati.agent.client.ControllerClient.putData(ControllerClient.java:131) > ~[agent-main-0.0.5-SNAPSHOT.jar:0.0.5-SNAPSHOT] > ( Thread-5) [DEBUG] ntegration.NeratiDeployer at > com.nerati.agent.client.ControllerManager.putData(ControllerManager.java:177) > ~[agent-main-0.0.5-SNAPSHOT.jar:0.0.5-SNAPSHOT] > ( Thread-5) [DEBUG] ntegration.NeratiDeployer at > com.nerati.agent.client.ControllerSendTask.run(ControllerSendTask.java:119) > ~[agent-main-0.0.5-SNAPSHOT.jar:0.0.5-SNAPSHOT] > ( Thread-5) [DEBUG] ntegration.NeratiDeployer at > java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439) > [na:1.6.0_37] > ( Thread-5) [DEBUG] ntegration.NeratiDeployer at > java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317) > [na:1.6.0_37] > ( Thread-5) [DEBUG] ntegration.NeratiDeployer at > java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150) [na:1.6.0_37] > ( Thread-5) [DEBUG] ntegration.NeratiDeployer at > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98) > [na:1.6.0_37] > ( Thread-5) [DEBUG] ntegration.NeratiDeployer at > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180) > [na:1.6.0_37] > ( Thread-5) [DEBUG] ntegration.NeratiDeployer at > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204) > [na:1.6.0_37] > ( Thread-5) [DEBUG] ntegration.NeratiDeployer at > java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) > [na:1.6.0_37] > ( Thread-5) [DEBUG] ntegration.NeratiDeployer at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) > [na:1.6.0_37] > ( Thread-5) [DEBUG] ntegration.NeratiDeployer at > java.lang.Thread.run(Thread.java:662) [na:1.6.0_37] > {noformat} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira