[ https://issues.apache.org/jira/browse/SOLR-17089?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17809475#comment-17809475 ]
ASF subversion and git services commented on SOLR-17089: -------------------------------------------------------- Commit 976ced1f4079c6d13a2f61ccfffbf0d5f5aa4e01 in solr's branch refs/heads/main from Jason Gerlowski [ https://gitbox.apache.org/repos/asf?p=solr.git;h=976ced1f407 ] SOLR-17089: Upgrade Jersey to 3.1.5 (#2178) Brings in a number of bug fixes and improvements, as well as fixing some irritating stacktraces that Jersey 2.x was logging in certain startup scenarios. > Extraction module causes Jersey code to throw NoClassDefFoundError > ------------------------------------------------------------------ > > Key: SOLR-17089 > URL: https://issues.apache.org/jira/browse/SOLR-17089 > Project: Solr > Issue Type: Improvement > Components: v2 API > Affects Versions: 9.4 > Reporter: Jason Gerlowski > Priority: Minor > Time Spent: 50m > Remaining Estimate: 0h > > (Credit to David Smiley for bringing this up and for the repro steps.) > In certain circumstances, Jersey application initialization runs into a > NoClassDefFoundError, usually for the "javax.activation.DataSource" class. > From the stacktrace (see below) what appears to be happening is that Jersey > uses this class somehow in looking for custom "MessageBodyWriter" and > "MessageBodyReader" implementations. (MBR and MBW are two interfaces that > Jersey provides to allow serialization/deserialization of request and > response bodies, respectively.) Somewhere in this process, Jersey runs into > the NoClassDefFoundError. > It's unclear why this stacktrace only occurs with the 'extraction' jars on > the classpath. And it's surprising that it occurs at all - classpath > scanning and plugin "auto-detection" should be disabled in our Jersey apps > via the "jersey.config.server.disableAutoDiscovery" and > "jersey.config.server.disableMetainfServicesLookup" properties that are set > on all apps. > AFAICT, the warning and stacktrace is largely just noise. Jersey fails to > register whatever custom component we're picking up in the "extraction" jars, > but since we're not trying to register any components from those in the first > place, this isn't really a problem. > But it's still worth understanding better why this occurs and at the least > suppressing the stack trace to avoid distracting users. > It can be reproduced trivially with the docker command: "docker run --rm -p > 8983:8983 -e SOLR_MODULES=extraction solr:9.4 solr-demo" > The stacktrace/warning in the logs can be seen below: > {code} > 2023-11-29 15:03:58.172 WARN (coreLoadExecutor-11-thread-1) [ x:demo] > o.g.j.i.Errors The following warnings have been detected: WARNING: HK2 > service reification failed for > [org.glassfish.jersey.message.internal.DataSourceProvider] with an exception: > MultiException stack 1 of 2 > java.lang.NoClassDefFoundError: javax/activation/DataSource > at java.base/java.lang.Class.getDeclaredConstructors0(Native Method) > at java.base/java.lang.Class.privateGetDeclaredConstructors(Unknown > Source) > at java.base/java.lang.Class.getDeclaredConstructors(Unknown Source) > at org.jvnet.hk2.internal.Utilities$3.run(Utilities.java:1354) > at org.jvnet.hk2.internal.Utilities$3.run(Utilities.java:1350) > at java.base/java.security.AccessController.doPrivileged(Unknown Source) > at > org.jvnet.hk2.internal.Utilities.getAllConstructors(Utilities.java:1350) > at > org.jvnet.hk2.internal.Utilities.findProducerConstructor(Utilities.java:1293) > at > org.jvnet.hk2.internal.DefaultClassAnalyzer.getConstructor(DefaultClassAnalyzer.java:60) > at > org.glassfish.jersey.inject.hk2.JerseyClassAnalyzer.getConstructor(JerseyClassAnalyzer.java:124) > at org.jvnet.hk2.internal.Utilities.getConstructor(Utilities.java:156) > at org.jvnet.hk2.internal.ClazzCreator.initialize(ClazzCreator.java:105) > at org.jvnet.hk2.internal.ClazzCreator.initialize(ClazzCreator.java:156) > at > org.jvnet.hk2.internal.SystemDescriptor.internalReify(SystemDescriptor.java:716) > at > org.jvnet.hk2.internal.SystemDescriptor.reify(SystemDescriptor.java:670) > at > org.jvnet.hk2.internal.ServiceLocatorImpl.reifyDescriptor(ServiceLocatorImpl.java:442) > at > org.jvnet.hk2.internal.ServiceLocatorImpl.narrow(ServiceLocatorImpl.java:2300) > at > org.jvnet.hk2.internal.ServiceLocatorImpl.access$1200(ServiceLocatorImpl.java:106) > at > org.jvnet.hk2.internal.ServiceLocatorImpl$10.compute(ServiceLocatorImpl.java:1385) > at > org.jvnet.hk2.internal.ServiceLocatorImpl$10.compute(ServiceLocatorImpl.java:1380) > at > org.glassfish.hk2.utilities.cache.internal.WeakCARCacheImpl.compute(WeakCARCacheImpl.java:105) > at > org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetAllServiceHandles(ServiceLocatorImpl.java:1442) > at > org.jvnet.hk2.internal.ServiceLocatorImpl.getAllServiceHandles(ServiceLocatorImpl.java:1368) > at > org.jvnet.hk2.internal.ServiceLocatorImpl.getAllServiceHandles(ServiceLocatorImpl.java:1356) > at > org.glassfish.jersey.inject.hk2.AbstractHk2InjectionManager.getAllServiceHolders(AbstractHk2InjectionManager.java:135) > at > org.glassfish.jersey.inject.hk2.ImmediateHk2InjectionManager.getAllServiceHolders(ImmediateHk2InjectionManager.java:30) > at > org.glassfish.jersey.internal.inject.Providers.getServiceHolders(Providers.java:307) > at > org.glassfish.jersey.internal.inject.Providers.getCustomProviders(Providers.java:151) > at > org.glassfish.jersey.message.internal.MessageBodyFactory.initialize(MessageBodyFactory.java:219) > at > org.glassfish.jersey.message.internal.MessageBodyFactory$MessageBodyWorkersConfigurator.postInit(MessageBodyFactory.java:114) > at > org.glassfish.jersey.server.ApplicationHandler.lambda$initialize$2(ApplicationHandler.java:353) > at java.base/java.util.Arrays$ArrayList.forEach(Unknown Source) > at > org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:353) > at > org.glassfish.jersey.server.ApplicationHandler.lambda$initialize$1(ApplicationHandler.java:297) > at org.glassfish.jersey.internal.Errors.process(Errors.java:292) > at org.glassfish.jersey.internal.Errors.process(Errors.java:274) > at > org.glassfish.jersey.internal.Errors.processWithException(Errors.java:232) > at > org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:296) > at > org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:261) > at > org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:236) > at org.apache.solr.core.SolrCore.lambda$new$2(SolrCore.java:1158) > at > org.apache.solr.jersey.JerseyAppHandlerCache.lambda$computeIfAbsent$0(JerseyAppHandlerCache.java:53) > at > com.github.benmanes.caffeine.cache.BoundedLocalCache.lambda$doComputeIfAbsent$14(BoundedLocalCache.java:2688) > at java.base/java.util.concurrent.ConcurrentHashMap.compute(Unknown > Source) > at > com.github.benmanes.caffeine.cache.BoundedLocalCache.doComputeIfAbsent(BoundedLocalCache.java:2686) > at > com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2669) > at > com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:112) > at > com.github.benmanes.caffeine.cache.LocalManualCache.get(LocalManualCache.java:62) > at > org.apache.solr.jersey.JerseyAppHandlerCache.computeIfAbsent(JerseyAppHandlerCache.java:53) > at org.apache.solr.core.SolrCore.<init>(SolrCore.java:1151) > at org.apache.solr.core.SolrCore.<init>(SolrCore.java:1056) > at > org.apache.solr.core.CoreContainer.createFromDescriptor(CoreContainer.java:1705) > at > org.apache.solr.core.CoreContainer.lambda$loadInternal$12(CoreContainer.java:1043) > at > com.codahale.metrics.InstrumentedExecutorService$InstrumentedCallable.call(InstrumentedExecutorService.java:234) > at java.base/java.util.concurrent.FutureTask.run(Unknown Source) > at > org.apache.solr.common.util.ExecutorUtil$MDCAwareThreadPoolExecutor.lambda$execute$0(ExecutorUtil.java:294) > at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown > Source) > at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown > Source) > at java.base/java.lang.Thread.run(Unknown Source) > Caused by: java.lang.ClassNotFoundException: javax.activation.DataSource > at java.base/java.net.URLClassLoader.findClass(Unknown Source) > at java.base/java.lang.ClassLoader.loadClass(Unknown Source) > at java.base/java.lang.ClassLoader.loadClass(Unknown Source) > at > org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:460) > at java.base/java.lang.ClassLoader.loadClass(Unknown Source) > ... 59 more > Suppressed: java.lang.ClassNotFoundException: > javax.activation.DataSource > at java.base/java.net.URLClassLoader.findClass(Unknown Source) > at > org.eclipse.jetty.webapp.WebAppClassLoader.findClass(WebAppClassLoader.java:581) > at > org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:484) > ... 60 more > MultiException stack 2 of 2 > java.lang.IllegalArgumentException: Errors were discovered while reifying > SystemDescriptor( > implementation=org.glassfish.jersey.message.internal.DataSourceProvider > > contracts={javax.ws.rs.ext.MessageBodyWriter,javax.ws.rs.ext.MessageBodyReader} > scope=javax.inject.Singleton > qualifiers={} > descriptorType=CLASS > descriptorVisibility=NORMAL > metadata= > rank=0 > loader=null > proxiable=null > proxyForSameScope=null > analysisName=null > id=91 > locatorId=1 > identityHashCode=1840961605 > reified=false) > at > org.jvnet.hk2.internal.SystemDescriptor.reify(SystemDescriptor.java:681) > at > org.jvnet.hk2.internal.ServiceLocatorImpl.reifyDescriptor(ServiceLocatorImpl.java:442) > at > org.jvnet.hk2.internal.ServiceLocatorImpl.narrow(ServiceLocatorImpl.java:2300) > at > org.jvnet.hk2.internal.ServiceLocatorImpl.access$1200(ServiceLocatorImpl.java:106) > at > org.jvnet.hk2.internal.ServiceLocatorImpl$10.compute(ServiceLocatorImpl.java:1385) > at > org.jvnet.hk2.internal.ServiceLocatorImpl$10.compute(ServiceLocatorImpl.java:1380) > at > org.glassfish.hk2.utilities.cache.internal.WeakCARCacheImpl.compute(WeakCARCacheImpl.java:105) > at > org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetAllServiceHandles(ServiceLocatorImpl.java:1442) > at > org.jvnet.hk2.internal.ServiceLocatorImpl.getAllServiceHandles(ServiceLocatorImpl.java:1368) > at > org.jvnet.hk2.internal.ServiceLocatorImpl.getAllServiceHandles(ServiceLocatorImpl.java:1356) > at > org.glassfish.jersey.inject.hk2.AbstractHk2InjectionManager.getAllServiceHolders(AbstractHk2InjectionManager.java:135) > at > org.glassfish.jersey.inject.hk2.ImmediateHk2InjectionManager.getAllServiceHolders(ImmediateHk2InjectionManager.java:30) > at > org.glassfish.jersey.internal.inject.Providers.getServiceHolders(Providers.java:307) > at > org.glassfish.jersey.internal.inject.Providers.getCustomProviders(Providers.java:151) > at > org.glassfish.jersey.message.internal.MessageBodyFactory.initialize(MessageBodyFactory.java:219) > at > org.glassfish.jersey.message.internal.MessageBodyFactory$MessageBodyWorkersConfigurator.postInit(MessageBodyFactory.java:114) > at > org.glassfish.jersey.server.ApplicationHandler.lambda$initialize$2(ApplicationHandler.java:353) > at java.base/java.util.Arrays$ArrayList.forEach(Unknown Source) > at > org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:353) > at > org.glassfish.jersey.server.ApplicationHandler.lambda$initialize$1(ApplicationHandler.java:297) > at org.glassfish.jersey.internal.Errors.process(Errors.java:292) > at org.glassfish.jersey.internal.Errors.process(Errors.java:274) > at > org.glassfish.jersey.internal.Errors.processWithException(Errors.java:232) > at > org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:296) > at > org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:261) > at > org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:236) > at org.apache.solr.core.SolrCore.lambda$new$2(SolrCore.java:1158) > at > org.apache.solr.jersey.JerseyAppHandlerCache.lambda$computeIfAbsent$0(JerseyAppHandlerCache.java:53) > at > com.github.benmanes.caffeine.cache.BoundedLocalCache.lambda$doComputeIfAbsent$14(BoundedLocalCache.java:2688) > at java.base/java.util.concurrent.ConcurrentHashMap.compute(Unknown > Source) > at > com.github.benmanes.caffeine.cache.BoundedLocalCache.doComputeIfAbsent(BoundedLocalCache.java:2686) > at > com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2669) > at > com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:112) > at > com.github.benmanes.caffeine.cache.LocalManualCache.get(LocalManualCache.java:62) > at > org.apache.solr.jersey.JerseyAppHandlerCache.computeIfAbsent(JerseyAppHandlerCache.java:53) > at org.apache.solr.core.SolrCore.<init>(SolrCore.java:1151) > at org.apache.solr.core.SolrCore.<init>(SolrCore.java:1056) > at > org.apache.solr.core.CoreContainer.createFromDescriptor(CoreContainer.java:1705) > at org.apache.solr.core.CoreContainer.lambda$loadInternal$12(CoreCon... > {code} -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@solr.apache.org For additional commands, e-mail: issues-h...@solr.apache.org