java.lang.NoSuchMethodError: okio.BufferedSource.rangeEquals(JLokio/ByteString;)Z

Я интегрирую Outlook API и для выполнения HTTP-вызовов использую Retrofit версии 2.3.0 и okHttp3 версии 3.9.1. Однако, когда я делаю HTTP-вызов, например:

 // Create a logging interceptor to log request and responses
  HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
  interceptor.setLevel( HttpLoggingInterceptor.Level.BODY );

  OkHttpClient client = new OkHttpClient.Builder().addInterceptor( interceptor ).build();

  // Create and configure the Retrofit object
  Retrofit retrofit = new Retrofit.Builder().baseUrl( authority ).client( client ).addConverterFactory( JacksonConverterFactory.create() ).build();

  // Generate the token service
  TokenService tokenService = retrofit.create( TokenService.class );

  try
  {
     return tokenService.getAccessTokenFromAuthCode( tenantId, getAppId(), getAppPassword(), "authorization_code", authCode, getRedirectUrl() ).execute().body();
  }
  catch ( IOException e )
  {
     TokenResponse error = new TokenResponse();
     error.setError( "IOException" );
     error.setErrorDescription( e.getMessage() );
     return error;
  }

Я получаю следующее исключение:

 org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoSuchMethodError: okio.BufferedSource.rangeEquals(JLokio/ByteString;)Z

Ниже мой частичный pom.xml:

    <!-- JACKSON DEPENDENCY FOR JSON PARSING -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.9.3</version>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.9.3</version>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.3</version>
    </dependency>

    <!-- RETROFIT DEPENDENCY FOR SENDING HTTP REQUESTS -->
    <dependency>
      <groupId>com.squareup.retrofit2</groupId>
      <artifactId>retrofit</artifactId>
      <version>2.3.0</version>
    </dependency>

    <dependency>
      <groupId>com.squareup.retrofit2</groupId>
      <artifactId>converter-jackson</artifactId>
      <version>2.3.0</version>
    </dependency>

    <dependency>
      <groupId>com.squareup.okhttp3</groupId>
      <artifactId>logging-interceptor</artifactId>
      <version>3.9.1</version>
    </dependency>

Может кто-нибудь помочь мне понять, что с этим не так?

4 ответа

BufferedSource 

находится в версии проекта Okio 1.13.0. Обе зависимости com.squareup.retrofit2 а также com.squareup.okhttp3 используйте эту версию. Также в этой версии этот метод включен. По версии это выглядит хорошо.

Местное окружение

Теперь не забудьте очистить свой репозиторий Maven. Может быть, старая версия где-то зависла. После этого сделайте проект обновления Maven и выполните чистую установку.

Tomcat Environment

Если это происходит у вашего кота, обязательно удалите work/Catalina/localhost/ папку, потому что иногда вещи могут быть кешированы там.

У меня возникла аналогичная проблема при выполнении задания MapReduce через YARN. В моем случае присутствовала существующая пониженная версия okio, которая переопределяла внешние библиотеки приложения. Я изменил его на okio 1.13.0, и проблема была исправлена.

Для меня это было вот такое место:

/home/vagrant/bigdata/hadoop/share/hadoop/hdfs/lib

Возникла аналогичная проблема при выполнении задания Spark для EMR через YARN, поскольку зависимости Okio/Okhttp для внешней библиотеки, используемой в приложении, переопределялись распределениями по пути к системным классам для Spark.

Решение. Затените / переместите зависимость Okio в сборке внешней библиотеки.

Это может быть потому, что конфликт с существующим Okio версия, предоставляемая зависимостью.

См. Spark и Influx: конфликт OKIO, конфликт с Apache Spark.

Используйте Maven / Gradle dep. Экспорт дерева, чтобы увидеть все переходные dep, или (в моем случае):

jar tf /usr/hdp/current/spark-client/lib/spark-assembly-1.6.3.2.6.3.0-235-hadoop2.7.3.2.6.3.0-235.jar | grep okio

Это будет список:

okio/BufferedSource.class

Затем извлеките okhttp pom.xml:

jar xf /usr/hdp/current/spark-client/lib/spark-assembly-1.6.3.2.6.3.0-235-hadoop2.7.3.2.6.3.0-235.jar META-INF/maven/com.squareup.okhttp/okhttp/pom.xml
cat META-INF/maven/com.squareup.okhttp/okhttp/pom.xml | grep version
Другие вопросы по тегам