tutorial restful jax example ejemplo java web-services rest jersey jax-rs

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.