【问题标题】:TOMEE + Spring + JAX-RS (NoSuchMethodError) jar conflictTOMEE + Spring + JAX-RS (NoSuchMethodError) jar 冲突
【发布时间】:2015-06-05 08:52:59
【问题描述】:

我正在尝试在 TomEE 服务器中运行我的应用程序,经过很多麻烦后我能够运行该应用程序。

但是由于某种原因,我遇到了 resteasy 的某种 jar 冲突,因此每当从应用程序调用 resteasy 资源类时,就会出现如下错误

Jun 05, 2015 5:57:34 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [resteasy-servlet] in context with path [/MyApplicationName] threw exception [Servlet execution threw an exception] with root cause
java.lang.NoSuchMethodError: org.jboss.resteasy.specimpl.BuiltResponse.getHeaders()Ljavax/ws/rs/core/MultivaluedMap;
    at org.jboss.resteasy.core.ServerResponseWriter.setDefaultContentType(ServerResponseWriter.java:186)
    at org.jboss.resteasy.core.ServerResponseWriter.writeNomapResponse(ServerResponseWriter.java:46)
    at org.jboss.resteasy.core.SynchronousDispatcher.writeResponse(SynchronousDispatcher.java:427)
    at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:376)
    at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:179)
    at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:220)
    at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56)
    at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:44)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:957)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:744)

我验证了在 resteasy jar 中扩展 Response 类的 BuiltResponse 类,它包含该方法似乎很好。我尝试提取许多其他罐子,以便它提供冲突。以下是我处理 resteasy 的 POM 的一部分

<!-- Resteasy rest services -->
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>jaxrs-api</artifactId>
            <version>3.0.10.Final</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jaxrs</artifactId>
            <version>3.0.10.Final</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jackson-provider</artifactId>
            <version>3.0.10.Final</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jaxb-provider</artifactId>
            <version>3.0.10.Final</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-multipart-provider</artifactId>
            <version>3.0.10.Final</version>
        </dependency>

我怀疑它可能是tomEE lib文件夹中的某个jar导致冲突但找不到任何东西。

问题 1:如果是这种情况,TomEE/Tomcat 中是否有一种方法可以强制应用程序在应用程序 WEB-INF/lib 文件夹而不是服务器 lib 文件夹中获取 jar。就像在 weblogic 中一样,我们可以通过将 jar 路径放在 prefer-application-package 标记中来更新 weblogic-application.xml。

问题 2 :所有搜索都指向我这是一个 jar 冲突问题。但是,如果它是应用程序的内部 jar 冲突,如何在 weblogic 或其他服务器中使用相同的 jar 结构?某些服务器是否具有比其他服务器更好的应用程序 jar 管理结构?

【问题讨论】:

  • 尝试将openejb.api.javax.ws.rs.Path.validation=false 放入tomee/conf/system.properties
  • 嘿@HowardWang 谢谢,我试过了,但没有帮助。仍然得到同样的异常。
  • 你为什么在 TomEE 上使用 resteasy?它捆绑了 CXF。

标签: spring tomcat jax-rs resteasy apache-tomee


【解决方案1】:

这是因为 Tomee lib 有另一个 jar 文件“javaee-api-6.0-6.jar”,它也有具有相同命名空间的 Response 类,所以它与 jax-rs jar 中的类名冲突。 Jax-rs 正在获取 Tomee lib jar 的 Response 类,它没有必需的方法。

【讨论】:

  • 我们如何告诉应用首先从 web-inf/lib 加载?
【解决方案2】:
Suggesting 3 solutions to your problem.All 3 solutions are working for me.Let me know if it works for you.

1) 使用与你相同的 pom.xml 的 tomcat 服务器

2) 修改 pom.xml。使用 tomee 服务器。

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jaxrs</artifactId>
    <version>2.2.1.GA</version>
</dependency>  

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jackson-provider</artifactId>
    <version>2.2.1.GA</version>
</dependency>

3) 使用 jersey jax-rs 实现。使用 tomee 服务器。

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-server</artifactId>
    <version>1.19</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-servlet</artifactId>
    <version>1.19</version>
</dependency>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-20
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多