web-dev-qa-db-fra.com

Jersey ClientBuilder.newClient (): source introuvable

J'ai une Java application Eclipse 64 bits avec Eclipse exécutée sur Windows 7 Pro x64.

J'ai téléchargé le bundle Jersey , jaxrs-ri-2.7.Zip, pour accéder à l'API RESTful du client.

J'ai ajouté ces fichiers jars externes (Projet | Chemin de génération | Configurer le chemin de génération ... | Bibliothèques):

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

Voici la source:

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();
    }
}

Je reçois l'erreur suivante, lorsque je franchis la première ligne, Clinet oClient ...:

Source not found.

Pourquoi l'erreur et comment la corriger? Pourquoi "source introuvable" au lieu d'une erreur réelle.

Remarque: J'ai essayé de copier les 3 fichiers jar dans le dossier lib du projet, mais cela n'a pas fait de bien. J'utilise le débogueur Eclipse, donc en appuyant sur F11 dans la vue de débogage, puis en faisant un F6 sur la ligne.

MISE À JOUR:

J'ai essayé de créer une toute nouvelle application 32 bits (fenêtre d'application WindowBuilder SWT) et j'ai simplement mis à jour le principal (...), et même problème. Cela signifie que le problème est indépendant de la plate-forme.

MISE À JOUR 2:

La réponse affichée pour essayer de courir n'était pas une mauvaise idée. :-) Cela a donné un autre indice que je dois retrouver. Voici le dépotoir.

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

RÉPONSE FINALE: (Merci aux deux réponses pour l'aide.)

Je manquais des dépendances. La liste requise est:

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
16
Sarah Weinberger

Je suppose que "Source non trouvée" est simplement un message d'Eclipse vous disant qu'il ne peut pas déboguer dans Client oClient = ClientBuilder.newClient(); car vous n'avez pas le code source pour les trois pots attachés dans Eclipse. Si vous exécutez simplement le programme (sans débogage), il pourrait très bien fonctionner. En savoir plus ici sur la façon d'ajouter du code source aux fichiers jar dans Eclipse: Existe-t-il un moyen simple d'attacher la source dans Eclipse? .

Si cela ne fonctionne toujours pas, je suggérerais d'ajouter tous les bocaux du bundle que vous avez téléchargé pour vous assurer de ne manquer aucune dépendance.

5
joscarsson

Il manque le pot api hk2 qui contient la classe org.glassfish.hk2.utilities.binding.AbstractBinder

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

9
JamesB

Uniquement pour les utilisateurs gradle.

Version correcte de javax.ws.rs-api et jersey-client résoudra le problème de classe introuvable.

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'
5
Purushothaman