【问题标题】:Jersey ClientBuilder.newClient(): source not foundJersey ClientBuilder.newClient():找不到源
【发布时间】:2014-03-21 19:56:13
【问题描述】:

我有一个 Java 64 位 Eclipse 应用程序,Eclipse 在 Windows 7 Pro x64 上运行。

我下载了 Jersey 包 jaxrs-ri-2.7.zip,用于客户端 RESTful API 访问。

我添加了这些外部 jars(项目 | 构建路径 | 配置构建路径... | 库):

jaxrs-ri/api/javax.ws.rs-api-2.0.jar
jaxrs-ri/lib/jersey-client.jar
jaxrs-ri/lib/jersey-common.jar

这里是来源:

package prjTestJersey;

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;

public static void main(String[] args)
{
    try
    {
        Client oClient = ClientBuilder.newClient();

        oClient.close();
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}

当跨过第一行 Clinet oClient... 时,我收到以下错误:

Source not found.

为什么会出现错误以及如何解决?为什么“找不到源”而不是真正的错误。

注意:我尝试将 3 个 jar 文件复制到项目的 lib 文件夹,但这没有任何好处。我正在使用 Eclipse 调试器,因此在调试视图中按 F11,然后在线路上执行 F6。

更新:

我尝试创建一个全新的 32 位应用程序(WindowBuilder SWT 应用程序窗口)并简单地更新了 main(...),但同样的问题。这意味着问题与平台无关。

更新 2:

发布的尝试运行的答案不是一个坏主意。 :-) 这提供了另一个线索,我必须追查。这是转储。

Exception in thread "main" java.lang.NoClassDefFoundError: org/glassfish/hk2/utilities/binding/AbstractBinder
    at org.glassfish.jersey.client.ClientConfig.<init>(ClientConfig.java:452)
    at org.glassfish.jersey.client.JerseyClientBuilder.<init>(JerseyClientBuilder.java:94)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    at javax.ws.rs.client.FactoryFinder.newInstance(FactoryFinder.java:116)
    at javax.ws.rs.client.FactoryFinder.find(FactoryFinder.java:206)
    at javax.ws.rs.client.ClientBuilder.newBuilder(ClientBuilder.java:86)
    at javax.ws.rs.client.ClientBuilder.newClient(ClientBuilder.java:114)
    at AppMain.main(AppMain.java:20)
Caused by: java.lang.ClassNotFoundException: org.glassfish.hk2.utilities.binding.AbstractBinder
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 12 more

最终答案: (感谢两个答案的帮助。)

我缺少依赖项。需要的清单是:

swt_win32_x86.jar
api/javax.ws.rs-api-2.0.jar
ext/jersey-guava-2.7.jar
ext/hk2-api-2.2.0.jar
lib/jersey-common.jar
lib/jersey-client.jar

【问题讨论】:

    标签: java eclipse rest jersey


    【解决方案1】:

    您缺少包含类 org.glassfish.hk2.utilities.binding.AbstractBinder 的 hk2 api jar

    http://mvnrepository.com/artifact/org.glassfish.hk2/hk2-api

    【讨论】:

    • ext/jersey-guava-2.7.jar 和 ext/hk2-api-2.2.0.jar,还不如把所有东西都加到ext里,因为我会做get/post/pull/删除,但我们会看到。
    • 这应该是这个问题的正确答案。
    【解决方案2】:

    我的猜测是“找不到源”只是来自 Eclipse 的一条消息,告诉您它无法调试到 Client oClient = ClientBuilder.newClient();,因为您没有 Eclipse 中附加的三个 jar 的源代码。如果您只是运行程序(不进行调试),它可能会很好地工作。在此处阅读有关如何在 Eclipse 中将源代码添加到 jar 文件的更多信息:Is there an easy way to attach source in Eclipse?

    如果它仍然不起作用,我建议从您下载的捆绑包中添加 所有 jar,以确保您没有丢失某些依赖项。

    【讨论】:

    • 在每个可能的 jar 中添加解决了这个问题。我现在只需要找出哪个罐子,然后我会将您的答案标记为答案。泽西岛的文档很差。谢谢!
    • 根据您对问题的补充,您似乎缺少 HK2 库(用于依赖注入)。添加hk2-api-2.2.0.jarhk2-locator-2.2.0.jarhk2-utils-2.2.0.jar 来获取这些(它们可能又依赖于其他一些jar,你真的想使用某种依赖解析来为你处理这个,比如gradle/maven)。
    • 我缺少两个罐子“ext/jersey-guava-2.7.jar”和“ext/hk2-api-2.2.0.jar”。是的,我需要在 Eclipse 中添加某种依赖检查器/加法器。
    【解决方案3】:

    仅适用于 gradle 用户。

    javax.ws.rs-apijersey-client 的正确版本将解决找不到类的问题。

    compile group: 'javax.ws.rs', name: 'javax.ws.rs-api', version: '2.1-m01'
    compile group: 'org.glassfish.jersey.core', name: 'jersey-client', version: '2.24.1'
    

    【讨论】:

      【解决方案4】:

      添加以下依赖项将解决问题

      <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-client</artifactId>
        <version>3.0.2.Final</version>
      </dependency>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-13
        • 2021-06-30
        • 1970-01-01
        相关资源
        最近更新 更多