I am getting below exception whenever my REST client code makes a call to the REST service using below code: Code:
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");
}
Exception:
: 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.<init>(Statuses.java:63)
at org.glassfish.jersey.message.internal.Statuses$StatusImpl.<init>(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
My REST service is deployed on Tomcat 8 server and the client code is deployed on JBoss 7.2. The client application is SIP-Servlets application which also bundles REST client.
When I test the client as a standalone Java Application it works but when deployed on JBoss it gives the error. My POM file is:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- logging dependency -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging-api</artifactId>
<version>1.0.4</version>
<scope>provided</scope>
</dependency>
<!-- web j2ee dependencies -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<!-- sip dependencies -->
<dependency>
<groupId>org.mobicents.servlet.sip</groupId>
<artifactId>sip-servlets-spec</artifactId>
<version>1.7.0.FINAL</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.13</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-common</artifactId>
<version>2.13</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.13</version>
</dependency>
I also try to do as suggested on this link https://github.com/gondor/openstack4j/issues/30 It says to disable JAX-RS from JBOSS config standalone.xml. I am using standalone-sip.xml while starting the server so I modified that only. Removed these two lines:
<subsystem xmlns="urn:jboss:domain:jaxrs:1.0"/>
<extension module="org.jboss.as.jaxrs"/>
This also is not working. I don't know how to disable, just searched for JAX-RS and deleted those lines where I found those.
In one SO post there was a suggestion to use javax.ws.rs.core.Response respone
instead of Response response
tried that also but no luck.
One more info: the REST call itself is successful, that I can see on tomcat server.
Please suggest what else can be done.
Thanks
I recently bumped into this problem. It was caused by a library providing an old implementation of
javax.ws.rs.core
. I fixed it as follows:I encountered a similar error. "java.lang.NoSuchMethodError: javax/ws/rs/ClientErrorException.validate(Ljavax/ws/rs/core/Response;Ljavax/ws/rs/core/Response$Status$Family;"
Root cause: web service performance tester invoke the web service using script without passing in correct request body. missing a "/" in the path url of web service call is another case.
when you see this validation error, that means some major error already happened, this noSuchMethodError is only a minor byproduct when handling the major error.
Can you take a look at libraries catalogue of your JBoss instance and remove all implementations of JAX-WS? To me it seems they conflict with the Jersey you bundle in your WAR-file.
Edit:
Actually I guess you need to resolve JAX-WS version conflict between your server and web application. Method familyOf you are missing in Response.Status.Family was introduced in Java 7 but is missing from Java EE 6. So find Java EE 6 compatible Jersey version or upgrade the server.
And if later Maven will cause problems, then for the real kick, there's also
and
Well, we faced another situation. This time it has nothing to do with the urls. It is server side SSL certificate expired. So to summarized: 1. First, make sure that your urls are hit, meaning if you put a debug point on the code and launch server in (remote, if necessary) debug mode with debugger attached to your code. If your code could not be invoked, then it is mostly an url issue. The url issue could be (a) missing "/" in the end (b) method name is case sensitive and you missed one or two character. 2. If you can hit the url and debug through, then you should be able to easily go into the details of the Exception.