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>
誰かが私がこれを理解するのを手伝ってくれる?
BufferedSource
okioプロジェクトバージョン1.13.0にあります。依存関係com.squareup.retrofit2
とcom.squareup.okhttp3
の両方がこのバージョンを使用します。このバージョンにもこのメソッドが含まれています。バージョンに関しては問題ないようです。
ローカル環境
次に、Mavenリポジトリを必ずクリアしてください。たぶん、古いバージョンがどこかでハングアップしました。その後、Mavenアップデートプロジェクトとクリーンインストールを実行します。
Tomcat環境
これがTomcatで発生している場合は、work/Catalina/localhost/
フォルダーも削除してください。キャッシュされることがあるため、.
アプリケーションで使用される外部ライブラリの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
次に、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