泽西岛2.4和CXF 2.6

时间:2013-11-29 13:21:31

标签: java tomcat cxf dependency-management jersey-2.0

我已经实现了与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(加载为最后一个),一切正常。

我怎么能以优雅的方式解决这个问题?

1 个答案:

答案 0 :(得分:1)

是的,肯定是UriBuilder 冲突,当你重命名cxf jar时,你改变了查找顺序,使得正确的版本首先出现。我建议使用 Maven 进行依赖关系管理,其中可以使用 exclude 标记来表示不需要的子依赖关系。