Restful webservices - NoClassDefFoundError: org/glassfish/jersey/ExtendedConfig
Restful webservices - NoClassDefFoundError: org/glassfish/jersey/ExtendedConfig
所以我在this thread中创建了webservice,最后我设法解决了这个问题。现在我正在尝试使用此网络服务。
我在 Netbeans 上创建了一个新的 Web 项目,我正在使用 Apache Tomcat。这是使用网络服务的代码。我已经完成了一些教程来生成此代码。
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();
}
}
我创建了一个 main class 来调用 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.access0(URLClassLoader.java:71)
at java.net.URLClassLoader.run(URLClassLoader.java:361)
at java.net.URLClassLoader.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.run(URLClassLoader.java:366)
at java.net.URLClassLoader.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
我想这是一个库问题,但我无法解决。仅使用 JAX-RS 2.0 是不够的,所以我也在使用 Jersey 库。
这是怎么回事?这是使用此 Web 服务的正确方法吗?我看过其他一些版本,但不确定使用哪个版本。
正如我所怀疑的,这是一个库问题。此代码和这些导入仅适用于 Jersey 2.X(截至目前为 2.17 版)。我需要在捆绑包中包含所有库,即所有核心 Jersey 模块 jar 以及所有必需的第 3 方依赖项。我不需要包含任何 JAX-RS 2.0 库或 Jersey 1.X 罐子。
我做的另一件事是在 Netbeans 中使用新的 RESTful Java 客户端向导,然后将 Jersey 1.X jar 添加到我的项目中(截至今天,它的版本为 1.19) . API 有点不同,但同样有效。
删除特定消息:
NoClassDefFoundError: org/glassfish/jersey/ExtendedConfig
尝试将正确版本的 jersey-common.jar 包含到应用程序的 lib 文件夹中。
您的类路径中似乎缺少 jersey-common
jar
maven上的jar可以在下面url下载:
- http://mvnrepository.com/artifact/org.glassfish.jersey.core/jersey-common
所以我在this thread中创建了webservice,最后我设法解决了这个问题。现在我正在尝试使用此网络服务。
我在 Netbeans 上创建了一个新的 Web 项目,我正在使用 Apache Tomcat。这是使用网络服务的代码。我已经完成了一些教程来生成此代码。
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();
}
}
我创建了一个 main class 来调用 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.access0(URLClassLoader.java:71)
at java.net.URLClassLoader.run(URLClassLoader.java:361)
at java.net.URLClassLoader.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.run(URLClassLoader.java:366)
at java.net.URLClassLoader.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
我想这是一个库问题,但我无法解决。仅使用 JAX-RS 2.0 是不够的,所以我也在使用 Jersey 库。
这是怎么回事?这是使用此 Web 服务的正确方法吗?我看过其他一些版本,但不确定使用哪个版本。
正如我所怀疑的,这是一个库问题。此代码和这些导入仅适用于 Jersey 2.X(截至目前为 2.17 版)。我需要在捆绑包中包含所有库,即所有核心 Jersey 模块 jar 以及所有必需的第 3 方依赖项。我不需要包含任何 JAX-RS 2.0 库或 Jersey 1.X 罐子。
我做的另一件事是在 Netbeans 中使用新的 RESTful Java 客户端向导,然后将 Jersey 1.X jar 添加到我的项目中(截至今天,它的版本为 1.19) . API 有点不同,但同样有效。
删除特定消息:
NoClassDefFoundError: org/glassfish/jersey/ExtendedConfig
尝试将正确版本的 jersey-common.jar 包含到应用程序的 lib 文件夹中。
您的类路径中似乎缺少 jersey-common
jar
maven上的jar可以在下面url下载: - http://mvnrepository.com/artifact/org.glassfish.jersey.core/jersey-common