Restful Web服务 - NoClassDefFoundError: org/glassfish/jersey/ExtendedConfig

8

我在这个帖子中创建了一个Web服务,并最终成功解决了问题。现在我正在尝试使用这个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

我猜这是一个库的问题,但我无法解决它。仅使用JAX-RS 2.0不足以满足需求,所以我还在使用Jersey库。

这里出了什么问题?这是调用此Web服务的正确方式吗?我看到了一些其他版本,不确定该使用哪个版本。


你在使用Maven吗? - Krutik Jayswal
不,我从未使用过Maven。 - user3641702
你是否已经将JAR文件添加到域的lib目录中? - Krutik Jayswal
是的,在项目目录下有一个名为“libs”的文件夹。 - user3641702
3个回答

7

请确保如果它是父级的托管依赖项,其范围不是“test”,尽管我有该jar文件,但我忽略了这一点。 - Sridhar Sarnobat
需要使用jersey.common - koppor

0
正如我所怀疑的那样,这是一个libs问题。这段代码和这些导入只适用于Jersey 2.X(截至今天它的版本为2.17)。我需要在bundle中包含所有的libs,即所有核心Jersey模块jar以及所有必需的第三方依赖项。我不需要包含任何JAX-RS 2.0 libs或Jersey 1.X jars。
我做的另一件事是使用Netbeans中的New RESTful Java Client向导,然后将Jersey 1.X jars添加到我的项目中(截至今天它的版本为1.19)。API有点不同,但也可以工作。

0

要删除特定的消息:

NoClassDefFoundError: org/glassfish/jersey/ExtendedConfig

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接