通过Spring(servlet)配置启动JAX-RS服务时的java.lang.NoSuchMethodError

时间:2014-04-27 16:21:46

标签: spring cxf jax-rs

我有一个问题。我还是Spring Framework的新手,以及如何使用Apache CXF和JAX-RS服务配置Jetty服务器。

我正在开发一个Maven多模块项目,我的模块只是整个项目的一部分。它是用Java编写的。它使用Spring Framework和Spring Beans / BeanFactory。它在那里的XML文件中配置。

我遵循了那些文件:
  - http://cxf.apache.org/docs/jetty-configuration.html
  - http://cxf.apache.org/docs/jax-rs.html#JAX-RS-ConfiguringJAX-RSservices
  - http://cxf.apache.org/docs/secure-jax-rs-services.html

到目前为止,JAX-RS服务已经运行,但它显示了一个空网页。它还向我展示了一个LOG文件,JAX-RS服务的Java类(带有JAX-RS注释@GET,@ PUT等)已经运行并且已经调用,但是一旦我发送请求,我就会收到以下错误消息:

27 Apr 2014 20:05:53 (cdmi) [] /
java.lang.NoSuchMethodError: org.eclipse.jetty.server.Request.getConnection()Lorg/eclipse/jetty/server/HttpConnection;
    at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService(JettyHTTPDestination.java:222) ~[cxf-rt-transports-http-jetty-2.4.0.jar:2.4.0]
    at org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(JettyHTTPHandler.java:72) ~[cxf-rt-transports-http-jetty-2.4.0.jar:2.4.0]
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1088) ~[jetty-server-8.1.13.v20130916.jar:8.1.13.v20130916]
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1024) ~[jetty-server-8.1.13.v20130916.jar:8.1.13.v20130916]
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) ~[jetty-server-8.1.13.v20130916.jar:8.1.13.v20130916]
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255) ~[jetty-server-8.1.13.v20130916.jar:8.1.13.v20130916]
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154) ~[jetty-server-8.1.13.v20130916.jar:8.1.13.v20130916]
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) ~[jetty-server-8.1.13.v20130916.jar:8.1.13.v20130916]
    at org.eclipse.jetty.server.Server.handle(Server.java:370) ~[jetty-server-8.1.13.v20130916.jar:8.1.13.v20130916]
    at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489) [jetty-server-8.1.13.v20130916.jar:8.1.13.v20130916]
    at org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53) [jetty-server-8.1.13.v20130916.jar:8.1.13.v20130916]
    at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:949) [jetty-server-8.1.13.v20130916.jar:8.1.13.v20130916]
    at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1011) [jetty-server-8.1.13.v20130916.jar:8.1.13.v20130916]
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:644) [jetty-http-8.1.13.v20130916.jar:8.1.13.v20130916]
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235) [jetty-http-8.1.13.v20130916.jar:8.1.13.v20130916]
    at org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72) [jetty-server-8.1.13.v20130916.jar:8.1.13.v20130916]
    at org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:264) [jetty-server-8.1.13.v20130916.jar:8.1.13.v20130916]
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) [jetty-util-8.1.13.v20130916.jar:8.1.13.v20130916]
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) [jetty-util-8.1.13.v20130916.jar:8.1.13.v20130916]
    at java.lang.Thread.run(Thread.java:744) [na:1.7.0_55]

是否有人知道此错误消息。试图告诉我的错误信息是什么?如何解决?

我不确定可能需要哪些进一步的信息,但我可以在必要时添加该信息。 cxf-rt-transports-http-jetty(版本2.4.0)的依赖项存在于我的Maven模块的POM.xml文件中。

非常感谢提前!!!

1 个答案:

答案 0 :(得分:2)

NoSuchMethodError基本上意味着类定义在编译时和运行时之间发生了变化。这可能是因为在运行应用程序时使用不同版本的jar而不是使用编译的版本。

看起来有点在Jetty 8和9之间,getConnection方法已从Request中删除。我会检查您的目标文件夹,以确保您没有任何罐子的多个版本,并且您使用的版本彼此兼容。另外请确保您运行的是Jetty,它与您的应用程序所依赖的库版本相同。

您也可以运行maven dependency:tree来检查您的pom中的版本是否未被意外覆盖。