[
https://issues.apache.org/jira/browse/LOG4J2-1971?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16085091#comment-16085091
]
Gary Gregory commented on LOG4J2-1971:
--------------------------------------
I'm not sure why Karaf is doing it that way.
What is odd is that if I ask Karaf to list all the classes in the bundle, the
log4j-api activator class is not there, but the core is...
{noformat}
karaf@root()> classes 57
META-INF/versions/9/org/apache/logging/log4j/util/StackLocator.class
org/apache/logging/log4j/EventLogger.class
org/apache/logging/log4j/Level.class
org/apache/logging/log4j/LogManager.class
org/apache/logging/log4j/Logger.class
org/apache/logging/log4j/LoggingException.class
org/apache/logging/log4j/Marker.class
org/apache/logging/log4j/MarkerManager$Log4jMarker.class
org/apache/logging/log4j/MarkerManager.class
org/apache/logging/log4j/ThreadContext$1.class
org/apache/logging/log4j/ThreadContext$ContextStack.class
org/apache/logging/log4j/ThreadContext$EmptyIterator.class
org/apache/logging/log4j/ThreadContext$EmptyThreadContextStack.class
org/apache/logging/log4j/ThreadContext.class
org/apache/logging/log4j/core/osgi/Activator.class
org/apache/logging/log4j/core/osgi/BundleContextSelector.class
org/apache/logging/log4j/core/util/Assert.class
org/apache/logging/log4j/core/util/Booleans.class
org/apache/logging/log4j/core/util/Builder.class
org/apache/logging/log4j/core/util/CachedClock$1.class
org/apache/logging/log4j/core/util/CachedClock.class
org/apache/logging/log4j/core/util/Cancellable.class
org/apache/logging/log4j/core/util/Clock.class
org/apache/logging/log4j/core/util/ClockFactory.class
org/apache/logging/log4j/core/util/CloseShieldOutputStream.class
org/apache/logging/log4j/core/util/CloseShieldWriter.class
org/apache/logging/log4j/core/util/Closer.class
org/apache/logging/log4j/core/util/CoarseCachedClock$1.class
org/apache/logging/log4j/core/util/CoarseCachedClock.class
org/apache/logging/log4j/core/util/Constants.class
org/apache/logging/log4j/core/util/CronExpression$1.class
org/apache/logging/log4j/core/util/CronExpression$ValueSet.class
org/apache/logging/log4j/core/util/CronExpression.class
org/apache/logging/log4j/core/util/CyclicBuffer.class
org/apache/logging/log4j/core/util/DefaultShutdownCallbackRegistry$RegisteredCancellable.class
org/apache/logging/log4j/core/util/DefaultShutdownCallbackRegistry.class
org/apache/logging/log4j/core/util/DummyNanoClock.class
org/apache/logging/log4j/core/util/ExtensionLanguageMapping.class
org/apache/logging/log4j/core/util/FileUtils.class
org/apache/logging/log4j/core/util/FileWatcher.class
org/apache/logging/log4j/core/util/IOUtils.class
org/apache/logging/log4j/core/util/Integers.class
org/apache/logging/log4j/core/util/JndiCloser.class
org/apache/logging/log4j/core/util/JsonUtils.class
org/apache/logging/log4j/core/util/KeyValuePair$Builder.class
org/apache/logging/log4j/core/util/KeyValuePair.class
org/apache/logging/log4j/core/util/Loader.class
org/apache/logging/log4j/core/util/Log4jThread.class
org/apache/logging/log4j/core/util/NameUtil.class
org/apache/logging/log4j/core/util/NanoClock.class
org/apache/logging/log4j/core/util/NetUtils.class
org/apache/logging/log4j/core/util/NullOutputStream.class
org/apache/logging/log4j/core/util/ObjectArrayIterator.class
org/apache/logging/log4j/core/util/OptionConverter.class
org/apache/logging/log4j/core/util/Patterns.class
org/apache/logging/log4j/core/util/ReflectionUtil.class
org/apache/logging/log4j/core/util/SecretKeyProvider.class
org/apache/logging/log4j/core/util/SetUtils.class
org/apache/logging/log4j/core/util/ShutdownCallbackRegistry.class
org/apache/logging/log4j/core/util/StringBuilderWriter.class
org/apache/logging/log4j/core/util/StringEncoder.class
org/apache/logging/log4j/core/util/SystemClock.class
org/apache/logging/log4j/core/util/SystemNanoClock.class
org/apache/logging/log4j/core/util/Throwables.class
org/apache/logging/log4j/core/util/Transform.class
org/apache/logging/log4j/core/util/TypeUtil.class
org/apache/logging/log4j/core/util/UuidUtil.class
org/apache/logging/log4j/core/util/WatchManager$1.class
org/apache/logging/log4j/core/util/WatchManager$FileMonitor.class
org/apache/logging/log4j/core/util/WatchManager$WatchWorker.class
org/apache/logging/log4j/core/util/WatchManager.class
org/apache/logging/log4j/message/AbstractMessageFactory.class
org/apache/logging/log4j/message/BasicThreadInformation.class
org/apache/logging/log4j/message/ExtendedThreadInformation$1.class
org/apache/logging/log4j/message/ExtendedThreadInformation.class
org/apache/logging/log4j/message/FormattedMessage.class
org/apache/logging/log4j/message/FormattedMessageFactory.class
org/apache/logging/log4j/message/LocalizedMessage.class
org/apache/logging/log4j/message/LocalizedMessageFactory.class
org/apache/logging/log4j/message/LoggerNameAwareMessage.class
org/apache/logging/log4j/message/MapMessage$1.class
org/apache/logging/log4j/message/MapMessage$MapFormat.class
org/apache/logging/log4j/message/MapMessage.class
org/apache/logging/log4j/message/Message.class
org/apache/logging/log4j/message/MessageFactory.class
org/apache/logging/log4j/message/MessageFormatMessage.class
org/apache/logging/log4j/message/MessageFormatMessageFactory.class
org/apache/logging/log4j/message/MultiformatMessage.class
org/apache/logging/log4j/message/ObjectArrayMessage.class
org/apache/logging/log4j/message/ObjectMessage.class
org/apache/logging/log4j/message/ParameterizedMessage.class
org/apache/logging/log4j/message/ParameterizedMessageFactory.class
org/apache/logging/log4j/message/SimpleMessage.class
org/apache/logging/log4j/message/StringFormattedMessage.class
org/apache/logging/log4j/message/StringFormatterMessageFactory.class
org/apache/logging/log4j/message/StructuredDataId.class
org/apache/logging/log4j/message/StructuredDataMessage$Format.class
org/apache/logging/log4j/message/StructuredDataMessage.class
org/apache/logging/log4j/message/ThreadDumpMessage$1.class
org/apache/logging/log4j/message/ThreadDumpMessage$BasicThreadInfoFactory.class
org/apache/logging/log4j/message/ThreadDumpMessage$ExtendedThreadInfoFactory.class
org/apache/logging/log4j/message/ThreadDumpMessage$ThreadDumpMessageProxy.class
org/apache/logging/log4j/message/ThreadDumpMessage$ThreadInfoFactory.class
org/apache/logging/log4j/message/ThreadDumpMessage.class
org/apache/logging/log4j/message/ThreadInformation.class
org/apache/logging/log4j/message/TimestampMessage.class
org/apache/logging/log4j/simple/SimpleLogger.class
org/apache/logging/log4j/simple/SimpleLoggerContext.class
org/apache/logging/log4j/simple/SimpleLoggerContextFactory.class
org/apache/logging/log4j/spi/AbstractLogger.class
org/apache/logging/log4j/spi/AbstractLoggerAdapter.class
org/apache/logging/log4j/spi/DefaultThreadContextMap$1.class
org/apache/logging/log4j/spi/DefaultThreadContextMap.class
org/apache/logging/log4j/spi/DefaultThreadContextStack.class
org/apache/logging/log4j/spi/ExtendedLogger.class
org/apache/logging/log4j/spi/ExtendedLoggerWrapper.class
org/apache/logging/log4j/spi/LoggerAdapter.class
org/apache/logging/log4j/spi/LoggerContext.class
org/apache/logging/log4j/spi/LoggerContextFactory.class
org/apache/logging/log4j/spi/MutableThreadContextStack.class
org/apache/logging/log4j/spi/Provider.class
org/apache/logging/log4j/spi/StandardLevel.class
org/apache/logging/log4j/spi/ThreadContextMap.class
org/apache/logging/log4j/spi/ThreadContextStack.class
org/apache/logging/log4j/status/StatusConsoleListener.class
org/apache/logging/log4j/status/StatusData.class
org/apache/logging/log4j/status/StatusListener.class
org/apache/logging/log4j/status/StatusLogger$BoundedQueue.class
org/apache/logging/log4j/status/StatusLogger.class
org/apache/logging/log4j/util/Chars.class
org/apache/logging/log4j/util/EnglishEnums.class
org/apache/logging/log4j/util/LambdaUtil.class
org/apache/logging/log4j/util/LoaderUtil$1.class
org/apache/logging/log4j/util/LoaderUtil$ThreadContextClassLoaderGetter.class
org/apache/logging/log4j/util/LoaderUtil$UrlResource.class
org/apache/logging/log4j/util/LoaderUtil.class
org/apache/logging/log4j/util/MessageSupplier.class
org/apache/logging/log4j/util/PropertiesUtil.class
org/apache/logging/log4j/util/ProviderUtil.class
org/apache/logging/log4j/util/ReflectionUtil$PrivateSecurityManager.class
org/apache/logging/log4j/util/ReflectionUtil.class
org/apache/logging/log4j/util/StringBuilders.class
org/apache/logging/log4j/util/Strings.class
org/apache/logging/log4j/util/Supplier.class
{noformat}
> ClassCastException: org.eclipse.osgi.internal.loader.SystemBundleLoader$1
> cannot be cast to java.lang.ClassLoader
> -----------------------------------------------------------------------------------------------------------------
>
> Key: LOG4J2-1971
> URL: https://issues.apache.org/jira/browse/LOG4J2-1971
> Project: Log4j 2
> Issue Type: Bug
> Affects Versions: 2.8
> Reporter: liwenxian2017
> Fix For: 2.9
>
>
> When I migrated log4j from log4j 1.2.17 to log4j 2.8, There is an Exception
> like this:
> java.lang.ClassCastException:
> org.eclipse.osgi.internal.loader.SystemBundleLoader$1 cannot be cast to
> java.lang.ClassLoaderat
> org.eclipse.osgi.internal.resolver.BundleDescriptionImpl$DescriptionWiring.getClassLoader(BundleDescriptionImpl.java:1229)
> ~[org.eclipse.osgi.jar:?]at
> org.apache.logging.log4j.core.osgi.Activator.scanBundleForPlugins(Activator.java:70)
> ~[log4j-core.jar:2.8]at
> org.apache.logging.log4j.core.osgi.Activator.bundleChanged(Activator.java:91)
> ~[log4j-core.jar:2.8]at
> org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:847)
> ~[org.eclipse.osgi.jar:?]at
> org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
> ~[org.eclipse.osgi.jar:?]at
> org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
> ~[org.eclipse.osgi.jar:?]at
> org.eclipse.osgi.framework.internal.core.Framework.publishBundleEventPrivileged(Framework.java:1568)
> ~[org.eclipse.osgi.jar:?]at
> org.eclipse.osgi.framework.internal.core.Framework.publishBundleEvent(Framework.java:1504)
> ~[org.eclipse.osgi.jar:?]at
> org.eclipse.osgi.framework.internal.core.Framework.publishBundleEvent(Framework.java:1499)
> ~[org.eclipse.osgi.jar:?]at
> org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:247)
> ~[org.eclipse.osgi.jar:?]at
> org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:438)
> ~[org.eclipse.osgi.jar:?]at
> org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1)
> ~[org.eclipse.osgi.jar:?]at
> org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
> ~[org.eclipse.osgi.jar:?]at
> org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
> ~[org.eclipse.osgi.jar:?]
> I checked Activator.java in log4j-core:
> ...
> 86 @Override
> 87 public void bundleChanged(final BundleEvent event) {
> 88 switch (event.getType()) {
> 89 // FIXME: STARTING instead of STARTED?
> 90 case BundleEvent.STARTED:
> 91 scanBundleForPlugins(event.getBundle());
> 92 break;
> in line 91, it called scanBundleForPlugins for every bundles. But in line
> 60-61, it does not scan system bundle for plugins
> 57 private static void scanInstalledBundlesForPlugins(final BundleContext
> context) {
> 58 final Bundle[] bundles = context.getBundles();
> 59 for (final Bundle bundle : bundles) {
> 60 // LOG4J2-920: don't scan system bundle for plugins
> 61 if (bundle.getState() == Bundle.ACTIVE && bundle.getBundleId() != 0)
> {
> 62 // TODO: bundle state can change during this
> 63 scanBundleForPlugins(bundle);
> And org.eclipse.osgi_3.8.1 's bundle ID is just 0. So it skipped bundle
> org.eclipse.osgi in line 61-63. but it does not in line 91
> If I changed line 91 to:
> if (event.getBundle().getState() == Bundle.ACTIVE &&
> event.getBundle().getBundleId() != 0) {
> scanBundleForPlugins(event.getBundle());
> }
> The exception goes away.
> So is this a bug? Or this is NOT a bug and there is a workaround for this
> Exception? Thanks.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)