2 votes

Unirest donne NoSuchMethodError lors de l'utilisation de la méthode asString

J'essaie de faire un simple get vers un endpoint et de récupérer le corps de la réponse en tant que HttpResponse en utilisant la méthode asString(). Le code se compile, mais buggue à l'exécution en disant qu'il n'y a pas d'erreur de méthode de ce type.

J'ai importé Unirest dans mon build maven et j'ai suivi la documentation aquí

HttpResponse<String> response = Unirest.get("http://mywebsite/post")
                  .basicAuth("myapiuser", "mypassword")
                  .asString();

Et voici la trace de la pile :

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.http.client.config.RequestConfig$Builder.setNormalizeUri(Z)Lorg/apache/http/client/config/RequestConfig$Builder;
    at kong.unirest.apache.DefaultFactory.tryNormalize(DefaultFactory.java:47)
    at kong.unirest.apache.DefaultFactory.apply(DefaultFactory.java:42)
    at kong.unirest.apache.DefaultFactory.apply(DefaultFactory.java:32)
    at kong.unirest.apache.RequestPrep.getHttpRequestBase(RequestPrep.java:88)
    at kong.unirest.apache.RequestPrep.prepare(RequestPrep.java:69)
    at kong.unirest.apache.ApacheClient.request(ApacheClient.java:122)
    at kong.unirest.BaseRequest.asString(BaseRequest.java:177)
    at com.ideiio.testdataloader.TestDataLoader.testRestGet(TestDataLoader.java:62)
    at com.ideiio.testdataloader.TestDataLoader.main(TestDataLoader.java:34)

Je n'arrive pas à déterminer s'il s'agit d'un problème de dépendances manquantes de ma part (je suis assez novice en matière de maven) ou s'il s'agit d'un problème avec le code lui-même (bien que l'appel à Unirest soit presque une copie exacte de la documentation).

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

  <modelVersion>4.0.0</modelVersion>
  <groupId>com.ideiio.testdataloader</groupId>
  <artifactId>TestDataLoader</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>TestDataLoader</name>
  <url>http://maven.apache.org</url>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-csv</artifactId>
      <version>1.6</version>
    </dependency>

    <dependency>
      <groupId>io.rest-assured</groupId>
      <artifactId>rest-assured</artifactId>
      <version>3.0.0</version>
      <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.5</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.5</version>
    </dependency>
    <dependency>
      <groupId>com.konghq</groupId>
      <artifactId>unirest-java</artifactId>
      <version>2.3.11</version>
    </dependency>
  </dependencies>

  <properties>
    <maven.compiler.source>1.6</maven.compiler.source>
    <maven.compiler.target>1.6</maven.compiler.target>
  </properties>
</project>

2voto

C'est un problème de dépendances, je l'ai corrigé en ajoutant une version plus récente de httpclient dans pom. 4.5.9 qui remplace la 4.5.6.

<dependency>
           <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.9</version>
        </dependency>

0voto

puneet agarwal Points 41

En regardant votre exception, il recherche la méthode "java.lang.NoSuchMethodError : org.apache.http.client.config.RequestConfig$Builder.setNormalizeUri(Z)Lorg/apache/http/client/config/RequestConfig$Builder" alors que je peux voir la signature de la méthode comme suit "public RequestConfig.Builder setNormalizeUri(boolean normalizeUri) " Le problème peut être lié à la version des dépendances incompatibles utilisées ou à un conflit dû à la présence d'autres bocaux dans le chemin de votre classe. Pouvez-vous partager votre pom.xml.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X