Caused by: java.lang.ClassNotFoundException: org.apache.http.message.TokenParser 異常的解決辦法

問題概述

根據要求對Solr服務進行升級,經過全面改操後,啓動項目時,單元測試一直報錯,測試無法通過,項目啓動不起來,異常:“ Caused by: java.lang.ClassNotFoundException: org.apache.http.message.TokenParser ”,

部分截圖如下:

具體異常信息:

java.lang.NoClassDefFoundError: org/apache/http/message/TokenParser
	at org.apache.http.client.utils.URLEncodedUtils.parse(URLEncodedUtils.java:288)
	at org.apache.http.client.utils.URLEncodedUtils.parse(URLEncodedUtils.java:249)
	at org.apache.http.client.utils.URIBuilder.parseQuery(URIBuilder.java:111)
	at org.apache.http.client.utils.URIBuilder.digestURI(URIBuilder.java:199)
	at org.apache.http.client.utils.URIBuilder.<init>(URIBuilder.java:91)
	at org.apache.http.client.utils.URIUtils.rewriteURI(URIUtils.java:206)
	at org.apache.http.impl.client.DefaultRequestDirector.rewriteRequestURI(DefaultRequestDirector.java:347)
	at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:471)
	at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835)
	at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
	at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108)
	at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)
	at org.apache.solr.client.solrj.impl.HttpSolrServer.executeMethod(HttpSolrServer.java:448)
	at org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:210)
	at org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:206)
	at org.apache.solr.client.solrj.request.QueryRequest.process(QueryRequest.java:91)
	at org.apache.solr.client.solrj.SolrServer.query(SolrServer.java:301)
	at com.huazai.b2c.aiyou.test.solrj.TSolrjClient.queryDocumentById(TSolrjClient.java:232)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:538)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)
Caused by: java.lang.ClassNotFoundException: org.apache.http.message.TokenParser
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 41 more

 

解決辦法

經過博主的各種騷操作,最終把這個坑填好了,其天坑過程就不過多的叨叨了,

兩種解決辦法:

1、將solr版本降到4.x

solr4.x使用的 HttpSolrServer,SolrServer

solr5.x以後升級,改爲了 HttpSolrClient,SolrClient

就不貼源碼了,點到爲止,感興趣的可以去一探究竟,一般沒有必要浪費去看這個的,博主看只是爲了解決這個問題。

 

2、排除httpclient相關的兩個依賴包:

		<!-- solrj 客戶端 -->
		<dependency>
			<groupId>org.apache.solr</groupId>
			<artifactId>solr-solrj</artifactId>
			<version>4.10.4</version>
			<exclusions>
				<exclusion>
					<artifactId>httpclient</artifactId>
					<groupId>org.apache.httpcomponents</groupId>
				</exclusion>
				<exclusion>
					<artifactId>httpcore</artifactId>
					<groupId>org.apache.httpcomponents</groupId>
				</exclusion>
			</exclusions>
		</dependency>

有人提意見,將solrj升級到5.x以後或最新版本,如果一樣是老系統,博主不見升級,牽一髮則動全身,會出現各種版本不兼容(因爲博主試過,升級後,出現各種不兼容的情況,這個坑填好,又出現另一個坑,讓人感覺有永遠填不完的坑,經過一頓猛如虎的操作後,幾乎到了崩潰邊緣,然後果斷回滾代碼,關掉IDE,長長的深吸了口氣,終於解決了,結束!!!)

解決問題後,再次測試,通了:

 

 

 

 

 


 好了,關於 Caused by: java.lang.ClassNotFoundException: org.apache.http.message.TokenParser 異常的解決辦法 就寫到這兒了,如果還有什麼疑問或遇到什麼問題歡迎掃碼提問,也可以給我留言哦,我會一一詳細的解答的。 
歇後語:“ 共同學習,共同進步 ”,也希望大家多多關注CSND的IT社區。


作       者: 華    仔
聯繫作者: [email protected]
來        源: CSDN (Chinese Software Developer Network)
原        文: https://blog.csdn.net/Hello_World_QWP/article/details/98340187
版權聲明: 本文爲博主原創文章,請在轉載時務必註明博文出處!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章