java - restful - Servicios web tranquilos: NoClassDefFoundError: org/glassfish/jersey/ExtendedConfig
web service rest java eclipse (3)
Así que creé el servicio web en este hilo y finalmente logré resolver el problema. Ahora estoy tratando de consumir este servicio web.
Creé un nuevo proyecto web en Netbeans y estoy usando Apache Tomcat. Aquí está el código para consumir el servicio web. He pasado por algunos tutoriales para producir este código.
package com.client;
import java.net.URI;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriBuilder;
import org.glassfish.jersey.client.ClientConfig;
public class HelloClient {
public void consumeRest(){
ClientConfig config = new ClientConfig();
Client client = ClientBuilder.newClient(config);
WebTarget target = client.target(getBaseURI());
System.out.println("response");
System.out.println(target.path("hello").path("world").request()
.accept(MediaType.APPLICATION_JSON).get(Response.class)
.toString());
}
private URI getBaseURI() {
return UriBuilder.fromUri("http://localhost:8084/restful_example").build();
}
}
Creé una clase principal para llamar al método de consumo. Cuando lo ejecuto, obtengo esta excepción:
Exception in thread "main" java.lang.NoClassDefFoundError: org/glassfish/jersey/ExtendedConfig
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at com.client.HelloClient.consumeRest(HelloClient.java:29)
at com.client.main.main(main.java:16)
Caused by: java.lang.ClassNotFoundException: org.glassfish.jersey.ExtendedConfig
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 14 more
Java Result: 1
Supongo que es un problema de libs pero no pude resolverlo. Usar solo JAX-RS 2.0 no es suficiente, entonces también estoy usando libs de Jersey.
¿Qué pasa aquí? ¿Es esta la forma correcta de consumir este servicio web? He visto algunas otras versiones y no estoy seguro de cuál usar.
Como sospechaba, era un problema de Libs. Este código y estas importaciones solo funcionan con Jersey 2.X (está en la versión 2.17 a partir de hoy). Necesitaba incluir todas las bibliotecas del paquete, es decir, todos los módulos centrales de Jersey y todas las dependencias necesarias de terceros. No necesito incluir ninguna JAX-RS 2.0 libs o Jersey 1.X jarras.
Otra cosa que hice fue usar el nuevo asistente de RESTful Java Client en Netbeans y luego agregar los jar de Jersey 1.X a mi proyecto (está en la versión 1.19 a partir de hoy). La API es un poco diferente pero funciona igual.
Para eliminar el mensaje en particular:
NoClassDefFoundError: org/glassfish/jersey/ExtendedConfig
Intenta incluir la versión correcta de jersey-common.jar en la carpeta lib de tu aplicación.
Parece que te falta el jarro jersey-common
de tu classpath
Puede descargar el jar en maven en la siguiente URL : - http://mvnrepository.com/artifact/org.glassfish.jersey.core/jersey-common