【问题标题】:NoSuchMethodError: reactor.netty.http.client.HttpClient.option in ANT based Spring projectNoSuchMethodError:基于 ANT 的 Spring 项目中的 reactor.netty.http.client.HttpClient.option
【发布时间】:2021-05-22 23:09:42
【问题描述】:

我在使用 webClient 时遇到异常

Failed to instantiate [org.springframework.web.reactive.function.client.WebClient]: Factory method 'webClient' threw exception; nested exception is java.lang.NoSuchMethodError: reactor.netty.http.client.HttpClient.option(Lio/netty/channel/ChannelOption;Ljava/lang/Object;)Lreactor/netty/transport/Transport;

相关的罐子

这是一个基于 ANT 的 SPRING 项目。 我没有收到任何编译错误。

这是我创建 webClient 的代码

WebClient webClient(ReactiveClientRegistrationRepository  clientRegistrations ) {
    
    HttpClient httpClient = HttpClient.create()
              .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000)
              .responseTimeout(Duration.ofMillis(5000))
              .doOnConnected(conn -> 
                conn.addHandlerLast(new ReadTimeoutHandler(5000, TimeUnit.MILLISECONDS))
                  .addHandlerLast(new WriteTimeoutHandler(5000, TimeUnit.MILLISECONDS)));
    
    ClientHttpConnector connector = new ReactorClientHttpConnector(httpClient);

    InMemoryReactiveOAuth2AuthorizedClientService authorisedClient=new InMemoryReactiveOAuth2AuthorizedClientService(clientRegistrations);
    
    ServerOAuth2AuthorizedClientExchangeFilterFunction oauth=new ServerOAuth2AuthorizedClientExchangeFilterFunction(new AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager(clientRegistrations,authorisedClient));
    oauth.setDefaultClientRegistrationId("id");
    return WebClient.builder().baseUrl("sample URL")
            .clientConnector(connector)
            .filter(oauth)
            .build();
}

id 和示例 URL 是我替换的值。 看起来像是一些 JAR 问题,但我添加了几乎所有在研究此错误时发现的 JAR。

谢谢

【问题讨论】:

    标签: java spring spring-boot ant webclient


    【解决方案1】:

    这取决于 Spring(和 Reactor Netty)的版本。 在 5.2.x 和更高版本中,类 HttpClient 扩展了 ClientTransport - 在这种情况下,您的代码将起作用。 在早期版本中,documentation“提供”了这个实现:

    HttpClient httpClient = HttpClient.create().tcpConfiguration(client -> client.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 10000))
    

    【讨论】:

      猜你喜欢
      • 2012-05-31
      • 1970-01-01
      • 2014-08-30
      • 1970-01-01
      • 2014-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-28
      相关资源
      最近更新 更多