我已经实现了与Jersey 2.4的API集成,但是在尝试启动我的tomcat时遇到了问题
SEVERE: Servlet.service() for servlet [Jersey REST Service] in context with path [] 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 org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:286)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:218)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:81)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
使用UriBuilder可能存在冲突,它在org.apache.cxf.jaxrs.impl中的javax.ws.rs.core和UriBuilderImpl中引用。如果我在我的WEB-INF \ lib中将cxf-2.6.0.jar重命名为zxf-2.6.0.jar(加载为最后一个),一切正常。
我怎么能以优雅的方式解决这个问题?
答案 0 :(得分:1)
是的,肯定是UriBuilder 冲突,当你重命名cxf jar时,你改变了查找顺序,使得正确的版本首先出现。我建议使用 Maven 进行依赖关系管理,其中可以使用 exclude 标记来表示不需要的子依赖关系。