2013-03-28 5 views
0

Je tente d'obtenir un exemple de code propre d'authentification API Google OAuth2. Mon code est principalement basé sur l'explication à https://code.google.com/p/google-api-java-client/wiki/OAuth2NoSuchMethodError: JsonFactory.fromInputStream

Je dévier de ce tutoriel parce que je veux que mes bibliothèques soient gérées par Maven et parce que je veux créer un projet sans les dépendances de Google Apps Engine.

Chaque fois que je tente de l'exécution du projet sur mon serveur Glassfish, je reçois l'erreur suivante, ce qui indique probablement un conflit de dépendance.

java.lang.NoSuchMethodError: com.google.api.client.json.JsonFactory.fromInputStream (Ljava/io/InputStream; Ljava/lang/classe;) Ljava/lang/Object;

La pièce pertinente de mon pom.xml:

<dependencies> 
    <dependency> 
     <groupId>com.google.api-client</groupId> 
     <artifactId>google-api-client</artifactId> 
     <version>1.14.1-beta</version> 
    </dependency> 
    <dependency> 
     <groupId>com.google.http-client</groupId> 
     <artifactId>google-http-client</artifactId> 
     <version>1.14.1-beta</version> 
    </dependency> 
    <dependency> 
     <groupId>com.google.api-jackson2</groupId> 
     <artifactId>google-api-jackson2</artifactId> 
     <version>1.14.1-beta</version> 
    </dependency> 
    <dependency> 
     <groupId>com.google.apis</groupId> 
     <artifactId>google-api-services-calendar</artifactId> 
     <version>v3-rev34-1.14.1-beta</version> 
    </dependency> 
    <dependency> 
     <groupId>com.google.oauth-client</groupId> 
     <artifactId>google-oauth-client</artifactId> 
     <version>1.14.1-beta</version> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-core</artifactId> 
     <version>2.1.3</version> 
    </dependency> 
    <dependency> 
     <groupId>com.google.oauth-client</groupId> 
     <artifactId>google-oauth-client-servlet</artifactId> 
     <version>1.14.1-beta</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.persistence</groupId> 
     <artifactId>persistence-api</artifactId> 
     <version>1.0.2</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.validation</groupId> 
     <artifactId>validation-api</artifactId> 
     <version>1.1.0.CR2</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.faces</groupId> 
     <artifactId>jsf-api</artifactId> 
     <version>2.1</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.enterprise</groupId> 
     <artifactId>cdi-api</artifactId> 
     <version>1.1-PRD</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
     <version>3.0.1</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.annotation</groupId> 
     <artifactId>jsr250-api</artifactId> 
     <version>1.0</version> 
    </dependency> 
    <dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-web-api</artifactId> 
     <version>6.0</version> 
    </dependency> 
</dependencies> 

S'il vous plaît me aider à trouver la cause de cette erreur, car les dépendances utilisées semblent très bien pour moi et il n'y a aucun cas de problème similaire que je pouvais trouver.

+0

Il me semble qu'il y a une bibliothèque faisant référence à une autre bibliothèque et qu'elle s'attend à avoir cette méthode, le problème est la plupart du temps parce que l'une des bibliothèques n'est pas la bonne version devant la deuxième bibliothèque. –

+0

@Garis, cela semble exactement le problème, mais comme indiqué dans le fichier maven pom, toutes les API liées à google semblent la version la plus récente et correspondante (1.14.1-beta) – Cloud

+0

vous êtes sûr que les bibliothèques sont en cours de téléchargement? –

Répondre

1

La dépendance correcte pour Jackson2 est:

<dependency>   
    <groupId>com.google.http-client</groupId> 
    <artifactId>google-http-client-jackson2</artifactId> 
    <version>1.14.1-beta</version> 
</dependency> 

Une fois que je changé cela, le projet a construit avec succès, et j'ai pu appeler la méthode en question très bien.

Il pourrait y avoir quelque chose d'autre sur le chemin de classe qui est interférer. Je vous suggère d'exécuter le programme avec -verbose: class (voir here pour une explication plus détaillée), qui montrera tout conflit.