httpClient 版本不对应。

In the first example from http://htmlunit.sourceforge.net/gettingStarted.html

The following line of code

final HtmlPage page = webClient.getPage("http://htmlunit.sourceforge.net");

Results in a the following exception.

java.lang.IllegalArgumentException: Cannot locate declared field class org.apache.http.impl.client.HttpClientBuilder.sslContext
at org.apache.commons.lang3.Validate.isTrue(Validate.java:155)
at org.apache.commons.lang3.reflect.FieldUtils.readDeclaredField(FieldUtils.java:512)
at com.gargoylesoftware.htmlunit.HttpWebConnection.createConnectionManager(HttpWebConnection.java:944)
at com.gargoylesoftware.htmlunit.HttpWebConnection.getResponse(HttpWebConnection.java:161)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseFromWebConnection(WebClient.java:1321)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponse(WebClient.java:1238)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:346)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:415)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:400)
at com.thetestpeople.webcrawler.test.HtmlUnitMatcherTest.homePage(HtmlUnitMatcherTest.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
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:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

This problem also occurs in the 2.19 build, but that is not an option in the drop down.

Discussion
RBRi

RBRi - 2016-02-11
Looks like you have a wrong version of HttpClient in your classpath.

 
Martin

Martin - 2016-02-25
This occurs is both and 2.18 & 2.19. If the tutorial only works with an earlier version then that should be made explicit or the tutorial changed to what ever the new form is. AIH that tutorial explict quoites the following, which is what I used to resolve the dependencies for the build.

<dependency>
<groupId>net.sourceforge.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
<version>2.19</version>
</dependency>

 
RBRi

RBRi - 2016-02-25
Martin,
not sure if i got your point...
The dependency you mention is correct and if you have a look at the pom behind this dependency (e.g. http://mvnrepository.com/artifact/net.sourceforge.htmlunit/htmlunit/2.19) this pom points to the correct version (4.5.1) of HttpClient.
Maybe there is a different component in your project that introduces an older HttpClient.

Can you please verify that your classpath contains only the right HttpClient (have a look at Ahmeds comment below if you like to know how to check that).

 
RBRi

RBRi - 2016-02-11
Group: 2.18 --> 2.19
 
RBRi

RBRi - 2016-02-12
status: open --> pending
assigned_to: HtmlUnit --> RBRi
 
RBRi

RBRi - 2016-02-22
no response from the reporter, assume this is fixed

 
RBRi

RBRi - 2016-02-22
status: pending --> closed
 
Josh Diaz

Josh Diaz - 2016-02-24
Hey RBRi. I am trying to test for a 404 error on an internal page, and I am also getting the same exception as the OP. It happens when I run the following line (my code has a different URL obviously, but it happens for any page with a 404 status, so this one works as well):

final HtmlPage page = new WebClient().getPage("http://www.facebook.com/fjdkslfjdksl")

Here is my stacktrace, beginning with the call from my code at the line above:

java.lang.IllegalArgumentException: Cannot locate declared field class org.apache.http.impl.client.HttpClientBuilder.sslContext

at org.apache.commons.lang3.Validate.isTrue(Validate.java:155)
at org.apache.commons.lang3.reflect.FieldUtils.readDeclaredField(FieldUtils.java:512)
at com.gargoylesoftware.htmlunit.HttpWebConnection.createConnectionManager(HttpWebConnection.java:951)
at com.gargoylesoftware.htmlunit.HttpWebConnection.getResponse(HttpWebConnection.java:159)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseFromWebConnection(WebClient.java:1324)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponse(WebClient.java:1241)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:348)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:417)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:402)
at com.gargoylesoftware.htmlunit.WebClient$getPage.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
at test_classes.webdriver.ugp.HttpTests.check400Error(HttpTests.groovy:34)
 
Last edit: Josh Diaz 2016-02-24
Ahmed Ashour

Ahmed Ashour - 2016-02-24
Please print:

System.out.println(HttpClientBuilder.class.getProtectionDomain().getCodeSource().getLocation());

Which will provide your HttpComponent location, it should be version 4.5.1, not earlier

 
RBRi

RBRi - 2016-02-24
status: closed --> accepted
 
Josh Diaz

Josh Diaz - 2016-02-24
That was the issue! I updated the dependency and now it works. Thanks!

 
RBRi

RBRi - 2016-02-24
status: accepted --> closed
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值