Restful webservices – NoClassDefFoundError:org / glassfish / jersey / ExtendedConfig

所以我在这个线程中创建了webservice,最后我设法解决了这个问题。 现在我正在尝试使用这个Web服务。

我在Netbeans上创建了一个新的Web项目,我正在使用Apache Tomcat。 这是使用Web服务的代码。 我已经完成了一些教程来生成这段代码。

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(); } } 

我已经创建了一个主类来调用consume方法。 当我运行它时,我得到这个例外:

 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 

我想这是一个libs问题,但我无法解决它。 仅使用JAX-RS 2.0是不够的,所以我也使用Jersey libs。

这有什么不对? 这是使用此Web服务的正确方法吗? 我见过其他一些版本,我不确定使用哪一个版本。

似乎你错过了类路径中的jersey-common jar

您可以在以下url下载maven上的jar: – http://mvnrepository.com/artifact/org.glassfish.jersey.core/jersey-common

我怀疑,这是一个库存问题。 此代码和这些导入仅适用于Jersey 2.X(截至今日版本为2.17)。 我需要在bundle中包含所有lib,即所有核心Jersey模块jar以及所有必需的第三方依赖项。 我不需要包含任何JAX-RS 2.0库或Jersey 1.Xjar。

我做的另一件事是在Netbeans中使用New RESTful Java Client向导,然后将Jersey 1.Xjar子添加到我的项目中(截至今天版本为1.19)。 API有点不同但也有效。

要删除特定邮件:

 NoClassDefFoundError: org/glassfish/jersey/ExtendedConfig 

尝试将正确版本的jersey-common.jar包含到应用程序的lib文件夹中。