REST JAX-RS javax.ws.rs.ProcessingException:

每当我的REST客户端代码使用下面的代码调用REST服务时,我就会遇到exception: 代码:

public void putWatcher(Watcher watcher) { System.out.println("In REST Client putWatcher.***********"); target = target.path(RESOURCE_WATCHERS).path(watcher.getWatcheruri()); System.out.println(target.getUri()); Invocation.Builder builder = target.request(); builder.put(Entity.json(watcher)); // Response response = target.request().put(Entity.json(watcher)); System.out.println("Returned from REST Call"); } 

例外:

 : javax.ws.rs.ProcessingException: javax.ws.rs.core.Response$Status$Family.familyOf(I)Ljavax/ws/rs/core/Response$Status$Family; at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:255) at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:667) at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:664) at org.glassfish.jersey.internal.Errors.process(Errors.java:315) at org.glassfish.jersey.internal.Errors.process(Errors.java:297) at org.glassfish.jersey.internal.Errors.process(Errors.java:228) at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:424) at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:664) at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:424) at org.glassfish.jersey.client.JerseyInvocation$Builder.put(JerseyInvocation.java:318) Caused by: java.lang.NoSuchMethodError: javax.ws.rs.core.Response$Status$Family.familyOf(I)Ljavax/ws/rs/core/Response$Status$Family; at org.glassfish.jersey.message.internal.Statuses$StatusImpl.(Statuses.java:63) at org.glassfish.jersey.message.internal.Statuses$StatusImpl.(Statuses.java:54) at org.glassfish.jersey.message.internal.Statuses.from(Statuses.java:93) at org.glassfish.jersey.client.HttpUrlConnector._apply(HttpUrlConnector.java:323) at org.glassfish.jersey.client.HttpUrlConnector.apply(HttpUrlConnector.java:227) at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:246) ... 29 more 

我的REST服务部署在Tomcat 8服务器上, 客户端代码部署在JBoss 7.2上。 客户端应用程序是SIP-Servlets应用程序,它也捆绑了REST客户端。

当我将客户端作为独立的Java应用程序进行测试时,它可以工作,但是当部署在JBoss上时,它会产生错误。 我的POM文件是:

  junit junit 3.8.1 test    log4j log4j 1.2.14 provided   commons-logging commons-logging-api 1.0.4 provided    javax.servlet servlet-api 2.5 provided    org.mobicents.servlet.sip sip-servlets-spec 1.7.0.FINAL provided   org.glassfish.jersey.core jersey-client 2.13   org.glassfish.jersey.core jersey-common 2.13   org.codehaus.jackson jackson-mapper-asl 1.9.13   org.glassfish.jersey.media jersey-media-json-jackson 2.13  

我也尝试按照此链接上的建议进行操作https://github.com/gondor/openstack4j/issues/30它说要从JBOSS config standalone.xml禁用JAX-RS。 我在启动服务器时使用standalone-sip.xml,所以我只修改了它。 删除了这两行:

   

这也行不通。 我不知道如何禁用,只是搜索了JAX-RS并删除了我找到的那些行。

在一篇SOpost中有一个建议使用javax.ws.rs.core.Response respone而不是Response response尝试了但也没有运气。

还有一个信息:REST调用本身是成功的,我可以在tomcat服务器上看到。

请建议还可以做些什么。

谢谢

我最近碰到了这个问题。 它是由一个提供旧的javax.ws.rs.core实现的库引起的。 我把它固定如下:

   org.apache.axis2 axis2-jaxws 1.6.2 runtime    javax.ws.rs jsr311-api    

您可以查看JBoss实例的库目录并删除JAX-WS的所有实现吗? 对我来说,它似乎与您在WAR文件中捆绑的Jersey相冲突。

编辑:

实际上我想你需要解决服务器和Web应用程序之间的JAX-WS版本冲突。 方法系列如果在Response.Status.Family中缺少,则在Java 7中引入但Java EE 6中缺少该系列。 因此,找到兼容Java EE 6的Jersey版本或升级服务器。

如果后来Maven会引起问题,那么对于真正的踢,也有

 mvn dependency:tree 

  ...  ... 

我遇到了类似的错误。 “java.lang.NoSuchMethodError:javax / ws / rs / ClientErrorException.validate(Ljavax / ws / rs / core / Response; Ljavax / ws / rs / core / Response $ Status $ Family;”

根本原因:Web服务性能测试程序使用脚本调用Web服务,而不传递正确的请求正文。 在Web服务调用的路径url中缺少“/”是另一种情况。

当你看到这个validation错误时,这意味着已经发生了一些重大错误,这个noSuchMethodError在处理主要错误时只是次要的副产品。

好吧,我们面临另一种情况。 这次它与url无关。 服务器端SSL证书已过期。 总结如下:1。首先,确保您的url被命中,这意味着如果您在代码上放置一个调试点并在(远程,如果需要)调试模式下启动服务器,并将调试器附加到您的代码中。 如果无法调用您的代码,那么它主要是一个url问题。 url问题可能是(a)最后缺少“/”(b)方法名称区分大小写并且您错过了一个或两个字符。 2.如果你可以点击url并进行调试,那么你应该能够轻松地了解Exception的详细信息。