[
https://issues.apache.org/jira/browse/LOG4J2-2182?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Gary Gregory updated LOG4J2-2182:
---------------------------------
Summary: NullPointerException occurs at
org.apache.logging.log4j.util.Activator.loadProvider(Activator.java:81) in
log4j 2.10.0 (was: NullPointerException occurs in log4j 2.10.0)
> NullPointerException occurs at
> org.apache.logging.log4j.util.Activator.loadProvider(Activator.java:81) in
> log4j 2.10.0
> ----------------------------------------------------------------------------------------------------------------------
>
> Key: LOG4J2-2182
> URL: https://issues.apache.org/jira/browse/LOG4J2-2182
> Project: Log4j 2
> Issue Type: Bug
> Components: Boot
> Affects Versions: 2.10.0
> Reporter: liwenxian2017
> Priority: Major
>
> I use log4j 2.10.0 in project development, But there is Exception occurs:
> 2018-01-11 12:22:13,515 Start Level: Equinox Container:
> 3a750538-5739-473e-a609-4213b1901911 WARN Problem checking bundle
> org.apache.logging.log4j.coreconf for Log4j 2 provider.
> java.lang.NullPointerException
> at org.apache.logging.log4j.util.Activator.loadProvider(Activator.java:81)
> at org.apache.logging.log4j.util.Activator.loadProvider(Activator.java:70)
> at org.apache.logging.log4j.util.Activator.start(Activator.java:113)
> at
> org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:774)
> at
> org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:1)
> at java.security.AccessController.doPrivileged(Native Method)
> at
> org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:767)
> at
> org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:724)
> at
> org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:932)
> at
> org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:309)
> at org.eclipse.osgi.container.Module.doStart(Module.java:581)
> at org.eclipse.osgi.container.Module.start(Module.java:449)
> at
> org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1620)
> at
> org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1600)
> at
> org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1571)
> at
> org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1514)
> at
> org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1)
> at
> org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
> at
> org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
> I checked the code, The ERROR occurs in Activator.class in
> org.apache.logging.log4j.util in log4j-api-2.10.0.jar:
> 77 private void loadProvider(BundleContext context, BundleWiring bundleWiring)
> 78 {
> 79 + String filter = "(APIVersion>=2.60)";
> 80 + try {
> 81 + Collection<ServiceReference<Provider>> serviceReferences =
> context.getServiceReferences(Provider.class, "(APIVersion>=2.60)");
> 82 + Provider maxProvider = null;
> 83 + for (ServiceReference<Provider> serviceReference : serviceReferences) {
> 84 + Provider provider = (Provider)context.getService(serviceReference);
> 85 + if ((maxProvider == null) || (provider.getPriority().intValue() >
> maxProvider.getPriority().intValue()))
> 86 + { maxProvider = provider; 87 + }
> 88 + }
> 89 + if (maxProvider != null)
> 90 + { ProviderUtil.addProvider(maxProvider); 91 + }
> 92 + }
> 93 + catch (InvalidSyntaxException ex)
> 94 + { LOGGER.error("Invalid service filter: (APIVersion>=2.60)", ex); 95 + }
> List<URL> urls = bundleWiring.findEntries("META-INF",
> "log4j-provider.properties", 0);
> for (URL url : urls)
> { ProviderUtil.loadProvider(url, bundleWiring.getClassLoader()); }
> }
> compared with log4j-api-2.8.jar, we can see the codes marked with '+' are the
> new added codes in 2.10.0, The Exceptions occur because in line 81, context
> is null. But checking getBundleContext method in OSGI, we can see
> getBundleContext could return null if this bundle is not in the STARTING,
> ACTIVE, or STOPPING states or this bundle is a fragment bundle.
> In my case, bundle org.apache.logging.log4j.coreconf is a fragment bundle. So
> How to handle fragment in this case and let NullPointerException not ccur.
> Thanks.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)