[ 
https://issues.apache.org/jira/browse/SOLR-17089?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17812467#comment-17812467
 ] 

ASF subversion and git services commented on SOLR-17089:
--------------------------------------------------------

Commit 976ced1f4079c6d13a2f61ccfffbf0d5f5aa4e01 in solr's branch 
refs/heads/jira/SOLR-16858 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
>             Fix For: 9.5
>
>          Time Spent: 1h 20m
>  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

Reply via email to