TOMEE + Spring + JAX-RS(NoSuchMethodError)jar冲突 [英] TOMEE + Spring + JAX-RS (NoSuchMethodError) jar conflict

查看:126
本文介绍了TOMEE + Spring + JAX-RS(NoSuchMethodError)jar冲突的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图在TomEE服务器中运行我的应用程序,经过一番麻烦之后,我能够运行该应用程序.

I am trying to run my application in TomEE server, After much hassles I am able to run the application.

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

However for some reason I am getting some sort of jar conflict for resteasy and hence an error as below whenever a resteasy resource class is being called from application

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)

我验证了BuiltResponse类,该类在resteasy jar中扩展了Response类,并且包含该方法似乎还不错.我尝试提取许多其他罐子,以使其产生冲突.以下是我的POM的一部分,解决了安逸感

I verified the BuiltResponse class which extends the Response class in resteasy jar and it seems fine that it includes the method. I tried extracting many of other jars so that it provides a conflict. Below is part of my POM dealing with resteasy

<!-- 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,这会引起冲突,但找不到任何文件.

I am suspecting that it could be some jar which is in tomEE lib folder which is causing conflict but couldn't find any.

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

Question 1 : If that's the case is there a way in TomEE/Tomcat so that we can force application to pick up the jar in application WEB-INF/lib folder and not server lib folder. Just like in weblogic we can update weblogic-application.xml by putting the jar path in prefer-application-package tag.

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

Question 2 : All the searching points me that it's a jar conflict issue. But how come same jar structure works in weblogic or other server if it's an internal jar conflict of application? Does some server has better application jar managing structure than others?

推荐答案

这是因为Tomee lib具有另一个jar文件"javaee-api-6.0-6.jar",该文件还具有具有相同名称空间的Response类,因此存在冲突在jax-rs jar中具有类名. Jax-rs正在获取Tomee lib jar的Response类,该类没有必需的方法.

It is because Tomee lib has another jar file "javaee-api-6.0-6.jar" which also has Response class with same namespace, so it is conflicting with class name in jax-rs jar. Jax-rs is getting Tomee lib jar's Response class which doesnt have required method.

这篇关于TOMEE + Spring + JAX-RS(NoSuchMethodError)jar冲突的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆