欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

使用SolrJ管理索引库时,报错:java.lang.NoSuchMethodError: org.apache.http.impl.conn.PoolingHttpClie...

程序员文章站 2022-10-03 17:42:47
问题描述今天碰到一个问题,那就是在使用SolrJ管理索引库时,报了一个如下这样一个错误,具体错误信息记录如下:java.lang.NoSuchMethodError: org.apache.http.impl.conn.PoolingHttpClientConnectionManager.setValidateAfterInactivity(I)Vat org.apache.solr.client.solrj.impl.HttpClientUtil.createClient(HttpClientUt...

问题描述

今天碰到一个问题,那就是在使用SolrJ管理索引库时,报了一个如下这样一个错误,具体错误信息记录如下:

java.lang.NoSuchMethodError: org.apache.http.impl.conn.PoolingHttpClientConnectionManager.setValidateAfterInactivity(I)V
	at org.apache.solr.client.solrj.impl.HttpClientUtil.createClient(HttpClientUtil.java:279)
	at org.apache.solr.client.solrj.impl.HttpClientUtil.createClient(HttpClientUtil.java:330)
	at org.apache.solr.client.solrj.impl.HttpClientUtil.createClient(HttpClientUtil.java:268)
	at org.apache.solr.client.solrj.impl.HttpClientUtil.createClient(HttpClientUtil.java:255)
	at org.apache.solr.client.solrj.impl.HttpSolrClient.<init>(HttpSolrClient.java:204)
	at org.apache.solr.client.solrj.impl.HttpSolrClient$Builder.build(HttpSolrClient.java:952)
	at com.taotao.search.test.SolrJTest.testSolrJAddDocument(SolrJTest.java:19)

下面我给出了我的测试代码,你能看懂我写的啥吗?
使用SolrJ管理索引库时,报错:java.lang.NoSuchMethodError: org.apache.http.impl.conn.PoolingHttpClie...
这里,我还得说明一点,我使用的Solr是Solr 8.4.0这个版本。

报错原因

根据堆栈错误信息,咱们从下往上一直追踪,可以发现org.apache.solr.client.solrj.impl.HttpClientUtil类的createClient方法会调用org.apache.http.impl.conn.PoolingHttpClientConnectionManager类的setValidateAfterInactivity方法,但是在org.apache.http.impl.conn.PoolingHttpClientConnectionManager类中压根就没有setValidateAfterInactivity方法,所以就会报出java.lang.NoSuchMethodError这样的异常了。

解决方案

报错原因找到了,就是因为org.apache.http.impl.conn.PoolingHttpClientConnectionManager类中压根就没有setValidateAfterInactivity这个方法。

那么怎么解决这个错误呢?这个org.apache.http.impl.conn.PoolingHttpClientConnectionManager类在httpclient-4.3.5.jar(SolrJ的依赖包)中,该jar包中的org.apache.http.impl.conn.PoolingHttpClientConnectionManager类确实是没有setValidateAfterInactivity这个方法的。
使用SolrJ管理索引库时,报错:java.lang.NoSuchMethodError: org.apache.http.impl.conn.PoolingHttpClie...
这就很很明显了,就是因为httpclient的版本有问题。从上图可以看出,我使用的httpclient的版本是4.3.5,版本太低了,就导致了该版本jar包中的org.apache.http.impl.conn.PoolingHttpClientConnectionManager类没有setValidateAfterInactivity这个方法。

分析至此,解决方案就呼之欲出了,就是将使用的httpclient的版本调高点,例如修改成4.5.6

注意,父工程的pom文件是用于统一管理依赖版本号的,新建的工程依赖父工程的时候,就会继承父工程的pom文件中定义的依赖版本号信息,所以,当我们修改了父工程的pom文件,尤其是修改了版本号之后,一定要记得先clean一下父工程再重新install一下,如果你不这样做的话,那么后续会碰到一些问题会搞死你!

本文地址:https://blog.csdn.net/yerenyuan_pku/article/details/107485467