web-dev-qa-db-ja.com

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>

誰かが私がこれを理解するのを手伝ってくれる?

6
Paras
BufferedSource 

okioプロジェクトバージョン1.13.0にあります。依存関係com.squareup.retrofit2com.squareup.okhttp3の両方がこのバージョンを使用します。このバージョンにもこのメソッドが含まれています。バージョンに関しては問題ないようです。

ローカル環境

次に、Mavenリポジトリを必ずクリアしてください。たぶん、古いバージョンがどこかでハングアップしました。その後、Mavenアップデートプロジェクトとクリーンインストールを実行します。

Tomcat環境

これがTomcatで発生している場合は、work/Catalina/localhost/フォルダーも削除してください。キャッシュされることがあるため、.

1
Alex P.

アプリケーションで使用される外部ライブラリのOkio/Okhttp依存関係が、Sparkのシステムクラスパスに分散されている依存関係によってオーバーライドされていたため、YARNを介してEMRでSparkジョブを実行するときに同様の問題が発生しました。

解決策:外部ライブラリのビルドでOkio依存関係をシェーディング/再配置します。

これは、依存関係によって提供される既存のOkioバージョンとの競合が原因である可能性があります。

SparkとInflux:OKIOの競合 を参照してください。ApacheSparkとの競合があります。

Maven/Gradledepを使用します。すべての推移的な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

次に、okhttppom.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
0
Thomas Decaux