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