web-dev-qa-db-fra.com

Erreur lors de la tentative d'utilisation d'une API. Java.lang.NoSuchFieldError: INSTANCE

J'essaie de me connecter à l'API smartsheet à l'aide d'un programme Java ..__ Au départ, j'ai eu des problèmes avec le certificat de site, qui a été résolu en l'ajoutant au fichier de clés Java. Maintenant, lorsque j'essaie d'exécuter mon code, j'obtiens l'erreur suivante.

Exception in thread "main" Java.lang.NoSuchFieldError: INSTANCE
    at org.Apache.http.conn.ssl.SSLConnectionSocketFactory.<clinit>(SSLConnectionSocketFactory.Java:144)
    at org.Apache.http.impl.client.HttpClientBuilder.build(HttpClientBuilder.Java:955)
    at org.Apache.http.impl.client.HttpClients.createDefault(HttpClients.Java:58)
    at com.smartsheet.api.internal.http.DefaultHttpClient.<init>(DefaultHttpClient.Java:64)
    at com.smartsheet.api.SmartsheetBuilder.build(SmartsheetBuilder.Java:203)
    at SmartsheetConnection.main(SmartsheetConnection.Java:13)

C'est mon code (j'ai suivi leur documentation).

import com.smartsheet.api.*;
import com.smartsheet.api.models.*;
import com.smartsheet.api.models.enums.*;
import com.smartsheet.api.oauth.*;

public class SmartsheetConnection {
    public static void main(String[] args) throws SmartsheetException {
        // Set the access token.
        Token token = new Token();
        token.setAccessToken("foo");
        Smartsheet smartsheet = new SmartsheetBuilder().setAccessToken(token.getAccessToken()).build();
    }
}

La ligne générant une erreur est (ligne 144)

@Deprecated
    public static final X509HostnameVerifier ALLOW_ALL_HOSTNAME_VERIFIER
        = AllowAllHostnameVerifier.INSTANCE; 

mais je ne sais pas quoi en faire. J'utilise maven pour obtenir les dépendances. Cela a-t-il quelque chose à voir avec la version des composants Apache HttpComponents?

Voici le pom.xml

    <build>
        <sourceDirectory>src</sourceDirectory>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <warSourceDirectory>WebContent</warSourceDirectory>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>com.smartsheet</groupId>
            <artifactId>smartsheet-sdk-Java</artifactId>
            <version>2.0.2</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.Sun.jersey.contribs</groupId>
            <artifactId>jersey-Apache-client</artifactId>
            <version>1.9</version>
        </dependency>
    </dependencies>
9
mahacoder

D'autres publications à propos de cette erreur semblent suggérer que cela est généralement dû à des versions en conflit de httpcore jar. c'est-à-dire une ancienne version de httpcore sur le chemin d'accès aux classes. 

Pour plus d'informations, je vous suggère de vérifier les publications suivantes:

8
Kim Brandl

Je sais que je réponds un peu tard. En fait, je suis également aux prises avec le même problème et j'ai trouvé la solution en utilisant le plugin Maven Shade.

Le problème est le conflit JAR probablement que votre projet utilise une version différente de HTTPclient, puis votre conteneur sur lequel votre Appliaction est en cours d'exécution .

Pour résoudre ce problème, utilisez le plug-in Below Maven Shade, qui remplacera le nom de package de HttpClient par celui spécifié pour le package JAR. Cela va aussi refactoriser toute l'utilisation dans votre code.

<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.1</version>
<executions>
    <execution>
        <phase>package</phase>
        <goals>
            <goal>shade</goal>
        </goals>
        <configuration>
            <relocations>
              <relocation>
                <pattern>org.Apache.http</pattern>
                <shadedPattern>org.shaded.Apache.http</shadedPattern>
              </relocation>
            </relocations>
        </configuration>
    </execution>
</executions>
</plugin>

L'exemple ci-dessus modifiera le package HttpClient avec org.shaded.Apache.http à partir de org.Apache.http

Maven Shade créera également un pot gros/gras pour augmenter la taille de votre paquet final et affichera toutes les classes que vous avez mentionnées dans la section Dépendance dans POM.

Si vous ne souhaitez pas inclure tous les fichiers de dépendance dans votre fichier final, ajoutez l'étendue de la dépendance en tant que <scope>provided</scope>.

3
Animesh Sinha

J'utilisais intellij pour Android et le développement printanier ..__ Dans mon cas, j'ai accidentellement choisi Android SDK comme module SDK.

Après avoir choisi JDK 1.8 et reconstruit le projet, le problème a été résolu pour moi.

0
user2829759