【问题标题】:java.lang.AbstractMethodError: javax.ws.rs.core.UriBuilder.uri(Ljava/lang/String;)Ljavax/ws/rs/core/UriBuilder; [duplicate]java.lang.AbstractMethodError: javax.ws.rs.core.UriBuilder.uri(Ljava/lang/String;)Ljavax/ws/rs/core/UriBuilder; [复制]
【发布时间】:2015-03-18 22:44:15
【问题描述】:

所有,我有一个小的 REST 项目来学习 REST。以下是为 Jersey 和 Javax 提供 jar 的 pom.xml。我使用的是 Tomcat 8。

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.8.2</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-server</artifactId>
        <version>1.9</version>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-impl</artifactId>
        <version>2.1.12</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-client</artifactId>
        <version>1.10</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-json</artifactId>
        <version>1.10</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey.contribs</groupId>
        <artifactId>jersey-multipart</artifactId>
        <version>1.10</version>
    </dependency>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>7.0</version>
    </dependency>
</dependencies>

当我尝试运行任何 Web 服务时,我收到以下错误。

我用谷歌搜索了它,在大多数地方,它说这是一个 maven 依赖/冲突问题的赌注。泽西岛和 JAX-RS API 罐子。我无法找出哪些罐子可能会发生冲突。

请注意,我不久前运行这些服务没有问题...当我更换笔记本电脑时开始收到此错误...升级到 Tomcat 8,安装了 Eclipse Luna,仍然在 Java 7 上。

我无法弄清楚可能出了什么问题……如果您有任何想法,请告诉我。非常感谢任何帮助。

exception

javax.servlet.ServletException: Servlet execution threw an exception
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

root cause

    : Servlet.service() for servlet [Jersey Servlet] in context with path            [/restfulAPI] threw exception [Servlet execution threw an exception] with root cause
java.lang.AbstractMethodError: javax.ws.rs.core.UriBuilder.uri(Ljava/lang/String;)Ljavax/ws/rs/core/UriBuilder;
    at javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:119)
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:662)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:516)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1086)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:659)
    at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1558)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1515)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)

【问题讨论】:

  • 摆脱 Java EE api jar。它使用 JAX-RS 2。Jersey 1,使用 JAX-RS 1。您可能正在尝试使用一些 JAX-RS 2 API,而 Jersey 1 不支持它。 Jersey 1 已经引入了 jsr311,它是 JAX-RS 1 api jar。此外,可能不是问题,但不要混合泽西版本。 1.9 和 1.10 差别不大,但没有理由混合使用。
  • 删除了 Java EE api jar 并添加了 javax.ws.rs::jsr311-api::1.1.1 jar。上述经验。走了。使用 jersey-server 1.10 jar 时,得到:java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer。把 jersey-server::1.9 jar 放回去,它就可以正常工作了。
  • 是的,对不起,我想从 1.10 开始,servlet 容器在一个新的 jersey-servlet jar 中

标签: java web-services rest maven tomcat


【解决方案1】:

虽然我不知道为什么它曾经与 Tomcat 6 一起工作并在升级到 Tomcat 8 时开始出现上述异常,但是,被删除了:

javaee-api 7.0

jar 并添加:

<dependency> 
    <groupId>javax.ws.rs</groupId> 
    <artifactId>jsr311-api</artifactId> 
    <version>1.1.1</version> 
</dependency>

上述异常消失了。为了有一致性的赌注。 Jersey 客户端和服务器 jars,使用:

jersey-server 1.10

jar 但收到此错误:

java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer

当放:

jersey-server 1.9

返回,异常消失,REST 服务重新开始工作。

请注意,如果您的应用程序需要来自 javaee-api 的其他 jar,请单独添加每个 jar;看起来 javaee-api 包 jar 不能与 Jersey 1 共存。

【讨论】:

  • 什么是exp。简称?
  • Exp.例如可能很短。
  • 过一段时间再回到这个... exp。简称:异常。对困惑感到抱歉。还修改了响应。
【解决方案2】:

您在使用 weblogic 10.3 时遇到了问题,然后我刚刚删除了 javax.ws jar 及其依赖项,然后我的应用程序运行良好

【讨论】:

    【解决方案3】:

    我在升级球衣 1.17 -> 1.19 时遇到了这个问题。尝试过球衣 2,但示例不起作用。经过相当长的一段时间后,我降级到 1.17。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-10
      • 1970-01-01
      • 1970-01-01
      • 2016-02-07
      • 1970-01-01
      • 1970-01-01
      • 2014-12-26
      • 1970-01-01
      相关资源
      最近更新 更多