URI Builder 的 AbstractMethodError

AbstractMethodError with URI Builder

我刚刚尝试按照 this 教程为我的 Web 服务实施基于令牌的身份验证,并且刚刚完成 "Securing your REST endpoints" 步骤,但现在我总是收到 AbstractMethodError,当调用我的端点。

我已经在 上读到这个问题似乎是由于库的兼容性问题而发生的,但答案包括我没有使用的 Maven,所以我尝试手动交换库,但是那没有成功,我不断收到相同或不同的错误。

我必须删除哪些库,我必须保留哪些库?

控制台输出:

   SCHWERWIEGEND: Servlet.service() for servlet [jersey-servlet] in context with path [/FM] 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:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)

在 Internet 上进一步搜索后,我认为要修复此错误,我必须将 "cfx-bundle-3.0.0-milestone2.jar" 包含到我的项目中,其中包含 UriBuilder 的实现。

您可能已经解决了问题,但实际问题是

uri 方法是 UriBuilder JAX-RS 规范 2.0 版中的抽象方法。

您正在尝试将 JAX-RS 2.0Jersey 1.* 一起使用。相反,您需要使用实现 JAX-RS 2.0 并包含 uri 方法实现的 Jersey 2.*