Glassfish Jersey + Weld creates AbstractMethodError



我有一个基于JDK8, Tomcat7 (V2.1), Jersey(2.35)和CDI-Weld (2.48 . final)的web应用程序

自从我开始web容器,我收到这个异常总是两次。这两个例外将每5分钟出现一次。我想tomcat有没有超时?

第一个异常将以ERROR Allocate exception for servlet package.RestApplication

第二个带有:ERROR StandardWrapper.Throwable

下面两种情况下的堆栈是相同的,如下所示:

2022-04-25 13:56:34.3635 [10] INFO  - [] 2022-04-25 13:56:34,369 ERROR StandardWrapper.Throwable   [Jdk14Logger.java:101]
2022-04-25 13:56:34.3635 [10] INFO  - [] java.lang.AbstractMethodError: Method org/glassfish/jersey/gf/cdi/internal/CdiComponentProvider.initialize(Lorg/glassfish/jersey/internal/inject/InjectionManager;)V is abstract
2022-04-25 13:56:34.3635 [10] INFO  - [] at org.glassfish.jersey.gf.cdi.internal.CdiComponentProvider.initialize(CdiComponentProvider.java)
2022-04-25 13:56:34.3635 [10] INFO  - [] at org.glassfish.jersey.server.ComponentProviderConfigurator.lambda$null$0(ComponentProviderConfigurator.java:55)
2022-04-25 13:56:34.3635 [10] INFO  - [] at java.util.stream.ReferencePipeline$11$1.accept(ReferencePipeline.java:439)
2022-04-25 13:56:34.3635 [10] INFO  - [] at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
2022-04-25 13:56:34.3635 [10] INFO  - [] at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1384)
2022-04-25 13:56:34.3635 [10] INFO  - [] at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
2022-04-25 13:56:34.3635 [10] INFO  - [] at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
2022-04-25 13:56:34.3635 [10] INFO  - [] at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
2022-04-25 13:56:34.3635 [10] INFO  - [] at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
2022-04-25 13:56:34.3635 [10] INFO  - [] at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:566)
2022-04-25 13:56:34.3635 [10] INFO  - [] at org.glassfish.jersey.server.ComponentProviderConfigurator.lambda$init$1(ComponentProviderConfigurator.java:56)
2022-04-25 13:56:34.3635 [10] INFO  - [] at org.glassfish.jersey.internal.util.collection.Values$LazyValueImpl.get(Values.java:317)
2022-04-25 13:56:34.3635 [10] INFO  - [] at org.glassfish.jersey.server.ApplicationConfigurator.createApplication(ApplicationConfigurator.java:98)
2022-04-25 13:56:34.3635 [10] INFO  - [] at org.glassfish.jersey.server.ApplicationConfigurator.init(ApplicationConfigurator.java:72)
2022-04-25 13:56:34.3635 [10] INFO  - [] at org.glassfish.jersey.server.ApplicationHandler.lambda$initialize$0(ApplicationHandler.java:294)
2022-04-25 13:56:34.3635 [10] INFO  - [] at java.util.Arrays$ArrayList.forEach(Arrays.java:3880)
2022-04-25 13:56:34.3635 [10] INFO  - [] at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:294)
2022-04-25 13:56:34.3635 [10] INFO  - [] at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:261)
2022-04-25 13:56:34.3635 [10] INFO  - [] at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:311)
2022-04-25 13:56:34.3635 [10] INFO  - [] at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:154)
2022-04-25 13:56:34.3635 [10] INFO  - [] at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:347)
2022-04-25 13:56:34.3635 [10] INFO  - [] at javax.servlet.GenericServlet.init(GenericServlet.java:160)
2022-04-25 13:56:34.3635 [10] INFO  - [] at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280)
2022-04-25 13:56:34.3635 [10] INFO  - [] at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1091)
2022-04-25 13:56:34.3635 [10] INFO  - [] at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5033)
2022-04-25 13:56:34.3635 [10] INFO  - [] at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5317)
2022-04-25 13:56:34.3635 [10] INFO  - [] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
2022-04-25 13:56:34.3635 [10] INFO  - [] at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
2022-04-25 13:56:34.3635 [10] INFO  - [] at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
2022-04-25 13:56:34.3635 [10] INFO  - [] at java.util.concurrent.FutureTask.run(FutureTask.java:266)
2022-04-25 13:56:34.3635 [10] INFO  - [] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
2022-04-25 13:56:34.3635 [10] INFO  - [] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
2022-04-25 13:56:34.3635 [10] INFO  - [] at java.lang.Thread.run(Thread.java:748)

对于焊缝/CDI,我添加了:

<dependency>
<groupId>org.jboss.weld</groupId>
<artifactId>weld-core</artifactId>
<version>2.4.8.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.weld</groupId>
<artifactId>weld-spi</artifactId>
<version>2.4.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.weld</groupId>
<artifactId>weld-api</artifactId>
<version>2.4.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.weld.servlet</groupId>
<artifactId>weld-servlet</artifactId>
<version>2.4.8.Final</version>
</dependency>

对于Jersey,我添加了:

<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.35</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.35</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-sse</artifactId>
<version>2.35</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-sse</artifactId>
<version>2.35</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.inject</groupId>
<artifactId>jersey-hk2</artifactId>
<version>2.35</version>
</dependency>

而且这些:

<dependency>
<groupId>org.glassfish.jersey.containers.glassfish</groupId>
<artifactId>jersey-gf-cdi</artifactId>
<version>2.14</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers.glassfish</groupId>
<artifactId>jersey-gf-ejb</artifactId>
<version>2.35</version>
</dependency>

有人看到不兼容吗?有人知道为什么会出现这种例外吗?还是缺少任何依赖项?

解决这个问题的方法有很多。

一种可能性是更改为BOM并删除所有其他球衣依赖

<dependency>
<groupId>org.glassfish.jersey</groupId>
<artifactId>jersey-bom</artifactId>
<version>2.35</version>
<type>pom</type>
</dependency>

优点

  • 更少的依赖关系
  • BOMmakes "single"非常好的定制依赖

缺点:

最新更新