7

我正在集成 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

4 回答 4

1

我在通过 YARN 执行 MapReduce 作业时遇到了类似的问题。就我而言,存在一个现有的降级 okio 版本,它覆盖了应用程序的外部库。我将其更改为 okio 1.13.0 并修复了问题。

对我来说就是这个位置:

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

于 2021-10-20T15:18:08.620 回答
1
BufferedSource 

okio项目版本 1.13.0中。既依赖com.squareup.retrofit2com.squareup.okhttp3使用这个版本。此版本中也包含此方法。版本方面看起来不错。

当地环境

现在确保清除您的 Maven 存储库。也许旧版本挂在某个地方。之后做一个 Maven 更新项目和一个全新的安装。

Tomcat 环境

如果这发生在您的 tomcat 中,请确保删除该work/Catalina/localhost/文件夹,因为有时可能会在那里缓存内容。

于 2018-01-16T10:20:01.240 回答
0

通过 YARN 在 EMR 上执行 Spark 作业时遇到了类似的问题,因为应用程序中使用的外部库的 Okio/Okhttp 依赖关系被分布在 Spark 的系统类路径上的那些覆盖。

解决方案:在外部库的构建中隐藏/重新定位 Okio 依赖项。

于 2019-05-23T23:25:10.783 回答
0

Okio这可能是因为与依赖项提供的现有版本冲突。

请参阅Spark 和 Influx:OKIO 冲突,与 Apache Spark 存在冲突。

使用 Maven / Gradle 部门。树导出以查看所有传递 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
于 2018-11-26T15:36:23.217 回答