簡體   English   中英

Jersey ClientBuilder.newClient():找不到源

[英]Jersey ClientBuilder.newClient(): source not found

我有一個 Java 64 位 Eclipse 應用程序,Eclipse 運行在 Windows 7 Pro x64 上。

我下載了Jersey包 jaxrs-ri-2.7.zip,用於客戶端 RESTful API 訪問。

我添加了這些外部 jars (Project | Build Path | Configure Build Path... | Libraries):

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

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

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

我的猜測是“找不到源”只是來自 Eclipse 的一條消息,告訴您它無法調試到Client oClient = ClientBuilder.newClient(); 因為您沒有 Eclipse 中附加的三個 jar 的源代碼。 如果你只是運行程序(沒有調試),它可能會很好地工作。 在此處閱讀有關如何將源代碼添加到 Eclipse 中的 jar 文件的更多信息: 是否有一種簡單的方法可以在 Eclipse 中附加源代碼? .

如果它仍然不起作用,我建議從您下載的包中添加所有jar 以確保您沒有丟失某些依賴項。

僅適用於 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'

添加以下依賴項它將解決問題

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM