【问题标题】:Restful webservices - NoClassDefFoundError: org/glassfish/jersey/ExtendedConfigRestful webservices - NoClassDefFoundError: org/glassfish/jersey/ExtendedConfig
【发布时间】:2015-05-18 13:10:57
【问题描述】:

所以我在this thread 中创建了网络服务,最后我设法解决了这个问题。现在我正在尝试使用这个网络服务。

我在 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吗?
  • 不,我没用过 maven
  • 你在域的lib目录下添加jar文件了吗?
  • 是的,在项目目录的“libs”文件夹中

标签: java web-services rest jersey jax-rs


【解决方案1】:

您的类路径中似乎缺少 jersey-common jar

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

【讨论】:

【解决方案2】:

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

我做的另一件事是在 Netbeans 中使用 New RESTful Java Client 向导,然后将 Jersey 1.X jar 添加到我的项目中(截至今天它的版本为 1.19)。 API 稍有不同,但也能正常工作。

【讨论】:

    【解决方案3】:

    删除特定消息:

    NoClassDefFoundError: org/glassfish/jersey/ExtendedConfig
    

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

    【讨论】:

      猜你喜欢
      • 2016-04-23
      • 1970-01-01
      • 2013-08-22
      • 2016-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-15
      相关资源
      最近更新 更多