Java - .jar库方法有冲突吗?

时间:2013-07-05 22:27:11

标签: java htmlunit apache-httpclient-4.x nosuchmethoderror

我有一个应用程序需要httpclient-4.2.5.jar库才能正确运行。我也想使用HtmlUnit库(版本2.12)。由于库冲突(在httpclient-4.2.5.jar和htmlunit-2.12.jar之间),它失败了(我认为)

这是我的日志输出,但是我没有太多地记录它对我说的内容,因为我没有在日志中调用任何这些方法......

Caused by: java.lang.RuntimeException: java.lang.NoSuchMethodException:   org.apache.http.conn.ssl.SSLSocketFactory.createDefaultSSLContext()
    at  com.gargoylesoftware.htmlunit.HtmlUnitSSLSocketFactory.createSSLContext(HtmlUnitSSLSocketFactory.java:119)
    at com.gargoylesoftware.htmlunit.HtmlUnitSSLSocketFactory.<init>(HtmlUnitSSLSocketFactory.java:102)
    at com.gargoylesoftware.htmlunit.HtmlUnitSSLSocketFactory.buildSSLSocketFactory(HtmlUnitSSLSocketFactory.java:77)
    at com.gargoylesoftware.htmlunit.HttpWebConnection.configureHttpsScheme(HttpWebConnection.java:608)
    at com.gargoylesoftware.htmlunit.HttpWebConnection.createHttpClient(HttpWebConnection.java:555)
    at com.gargoylesoftware.htmlunit.HttpWebConnection.getHttpClient(HttpWebConnection.java:518)
    at com.gargoylesoftware.htmlunit.HttpWebConnection.getResponse(HttpWebConnection.java:155)
    at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseFromWebConnection(WebClient.java:1486)
    at com.gargoylesoftware.htmlunit.WebClient.loadWebResponse(WebClient.java:1403)
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:305)
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:374)
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:359) 

5 个答案:

答案 0 :(得分:3)

这一切都很简单。 HtmlUnit通过反思在HttpClient代码中使用私有方法:

http://sourceforge.net/p/htmlunit/code/8377/tree/trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/HtmlUnitSSLSocketFactory.java#l113

版本4.2.4中删除了相关方法。见HTTPCLIENT-1320

答案 1 :(得分:2)

嗯,对我有用的唯一解决方案是降级到httpclient 4.2 - http://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient/4.2

答案 2 :(得分:2)

将htmlunit版本提升为2.15可以解决问题。为我工作

答案 3 :(得分:0)

快速检查“org.apache.http.conn.ssl.SSLSocketFactory”类文档,那里没有这样的“createDefaultSSLContext()”方法。

答案 4 :(得分:0)

我有这个问题,因为我想在Selenium中使用WebClient。

我将Selenium从2.33.0升级到2.45.0,之后WebClient运行良好。