Jersey ClientBuilder.newClient(): 未找到源

2022-09-02 21:33:25

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

我下载了泽西岛捆绑包jaxrs-ri-2.7.zip,用于客户端RESTful API访问。

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

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

答案 1

你错过了 hk2 api jar,它包含类 org.glassfish.hk2.utilities.binding.AbstractBinder

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


答案 2

我的猜测是,“找不到源代码”只是来自Eclipse的一条消息,告诉你它不能调试,因为你没有Eclipse中附加的三个jar的源代码。如果您只是运行程序(不调试),它可能会很好地工作。在这里阅读更多关于如何在Eclipse中添加源代码到jar文件的信息:有没有一种简单的方法可以在Eclipse中附加源代码?Client oClient = ClientBuilder.newClient();

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


推荐