java.lang.NoSuchMethodError: javax.ws.rs.ClientErrorException.validate

项目在开发、测试环境上没问题,上生产环境报错如下

java.lang.NoSuchMethodError: javax.ws.rs.ClientErrorException.validate(Ljavax/ws/rs/core/Response;Ljavax/ws/rs/core/Response$Status$Family;)Ljavax/ws/rs/core/Response;
Exception

javax.servlet.ServletException: Servlet execution threw an exception
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	com.xx.sign.xx.CorsFilter.doFilter(CorsFilter.java:24)
Root Cause

java.lang.NoSuchMethodError: javax.ws.rs.ClientErrorException.validate(Ljavax/ws/rs/core/Response;Ljavax/ws/rs/core/Response$Status$Family;)Ljavax/ws/rs/core/Response;
	javax.ws.rs.ClientErrorException.<init>(ClientErrorException.java:88)
	org.apache.cxf.jaxrs.utils.JAXRSUtils.findTargetMethod(JAXRSUtils.java:503)
	org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:198)
	org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:90)
	org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
	org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
	org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239)
	org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:248)
	org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:222)
	org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:153)
	org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:167)
	org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286)
	org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:211)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
	org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	com.xx.xx.utils.CorsFilter.doFilter(CorsFilter.java:24)

开始以为是环境问题,但是查看后操作系统、jdk、tomcat版本都是一毛一样。

看到这个org.apache.tomcat.websocket.server.WsFilter.doFilter,难道是tomcat lib下面有包冲突了覆盖了,发现也不是。

那就问题就应该出在项目内部的jar有版本冲突,只是在不知道什么原因在生产环境类的加载顺序跟开发环境不一致。

在idea中找这个类ClientErrorException,发现这在这个jar中

发现没有validate方法

但是代码中看到很多地方调用validate方法

那就应该在父类中,进入父类WebapplicationException,看到父类有validate方法

那怎么会报错找不到方法呢?

再查找一下这个类WebApplicationException,喔嚯!找到两个,在不同的jar包,但是类路径一毛一样。

看jsr311-api-1.0.jar的类,没有validate方法

于是将该类移除,重启服务一看,正常了!

当然要在确定该jar无用的情况可直接移除,否则需要找高版本的替换。

最后吐槽一下:这个项目前人多年前写的,跟三方服务对接的项目,十多个接口,接口用servlet,里面既然有九十多个jar。

里面集齐了主流json解析、xml解析框架、spring一套,打个war包有60M+,几个其他项目一直在用这个,又不敢动。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值