This is for my work project so i can't be as specific as i would like to be.
The java app i am designing is supposed to do the following :
fills the web-page's form,
clicks on the submit
opens a new page that displays success/failure
in 5 seconds, the new page automatically redirects itself to another page depending on success/failure
the database is updated as a result.
(the web pages already exist and are setup as i have described here, and my app is suppose to handle them automatically)
I attempt to use HtmlUnit to handle the pages, filling of forms and clicking buttons.
However i am getting some exceptions i would wish to avoid if possible.
1) when i configure my web client like so :
wc = new WebClient();
wc.setJavaScriptEnabled(false);
The code does what it is supposed to, but throws this exception :
dec 09, 2015 5:28:37 PM com.gargoylesoftware.htmlunit.WebClient printContentIfNecessary
INFO: statusCode=[400] contentType=[]
dec 09, 2015 5:28:37 PM com.gargoylesoftware.htmlunit.WebClient printContentIfNecessary
INFO:
com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException: 400 Bad Request for http://www.booking.com/flexiproduct.html
at com.gargoylesoftware.htmlunit.WebClient.throwFailingHttpStatusCodeExceptionIfNecessary(WebClient.java:540)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:360)
at com.gargoylesoftware.htmlunit.html.BaseFrame.loadInnerPageIfPossible(BaseFrame.java:136)
at com.gargoylesoftware.htmlunit.html.BaseFrame.loadInnerPage(BaseFrame.java:109)
at com.gargoylesoftware.htmlunit.html.HtmlPage.loadFrames(HtmlPage.java:1527)
at com.gargoylesoftware.htmlunit.html.HtmlPage.initialize(HtmlPage.java:138)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:461)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:359)
at com.gargoylesoftware.htmlunit.ImmediateRefreshHandler.handleRefresh(ImmediateRefreshHandler.java:83)
at com.gargoylesoftware.htmlunit.html.HtmlPage.executeRefreshIfNeeded(HtmlPage.java:1093)
at com.gargoylesoftware.htmlunit.html.HtmlPage.initialize(HtmlPage.java:145)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:461)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:359)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:382)
at com.gargoylesoftware.htmlunit.html.HtmlForm.submit(HtmlForm.java:242)
at com.gargoylesoftware.htmlunit.html.HtmlImageInput.doClickAction(HtmlImageInput.java:150)
at com.gargoylesoftware.htmlunit.html.ClickableElement.click(ClickableElement.java:148)
at com.gargoylesoftware.htmlunit.html.ClickableElement.click(ClickableElement.java:109)
at com.gargoylesoftware.htmlunit.html.ClickableElement.click(ClickableElement.java:87)
at com.gargoylesoftware.htmlunit.html.HtmlImageInput.click(HtmlImageInput.java:175)
at com.gargoylesoftware.htmlunit.html.HtmlImageInput.click(HtmlImageInput.java:132)
at paymentproviders.PProvider.submitForm(PProvider.java:52)
at paymentproviders.APXProvider.completeTransaction(APXProvider.java:114)
at workApps.Lazaruss1.App.main(App.java:80)
The code works, the database is successfully updated, but it fails on the last redirect and does not open the final page. :(
2) when i configure the web client as such :
wc.setThrowExceptionOnFailingStatusCode(false);
I get the following exception and the program does not work :
dec 09, 2015 5:31:12 PM com.gargoylesoftware.htmlunit.WebClient printContentIfNecessary
INFO: statusCode=[400] contentType=[]
dec 09, 2015 5:31:12 PM com.gargoylesoftware.htmlunit.WebClient printContentIfNecessary
INFO:
Failed to read the SOAP message.
java.lang.RuntimeException: Refresh Aborted by HtmlUnit: Attempted to refresh a page using an ImmediateRefreshHandler which could have caused an OutOfMemoryError Please use WaitingRefreshHandler or ThreadedRefreshHandler instead.
at com.gargoylesoftware.htmlunit.ImmediateRefreshHandler.handleRefresh(ImmediateRefreshHandler.java:81)
at com.gargoylesoftware.htmlunit.html.HtmlPage.executeRefreshIfNeeded(HtmlPage.java:1093)
at com.gargoylesoftware.htmlunit.html.HtmlPage.initialize(HtmlPage.java:145)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:461)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:359)
at com.gargoylesoftware.htmlunit.ImmediateRefreshHandler.handleRefresh(ImmediateRefreshHandler.java:83)
at com.gargoylesoftware.htmlunit.html.HtmlPage.executeRefreshIfNeeded(HtmlPage.java:1093)
at com.gargoylesoftware.htmlunit.html.HtmlPage.initialize(HtmlPage.java:145)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:461)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:359)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:382)
at com.gargoylesoftware.htmlunit.html.HtmlForm.submit(HtmlForm.java:242)
at com.gargoylesoftware.htmlunit.html.HtmlImageInput.doClickAction(HtmlImageInput.java:150)
at com.gargoylesoftware.htmlunit.html.ClickableElement.click(ClickableElement.java:148)
at com.gargoylesoftware.htmlunit.html.ClickableElement.click(ClickableElement.java:109)
at com.gargoylesoftware.htmlunit.html.ClickableElement.click(ClickableElement.java:87)
at com.gargoylesoftware.htmlunit.html.HtmlImageInput.click(HtmlImageInput.java:175)
at com.gargoylesoftware.htmlunit.html.HtmlImageInput.click(HtmlImageInput.java:132)
at paymentproviders.PProvider.submitForm(PProvider.java:52)
at paymentproviders.APXProvider.completeTransaction(APXProvider.java:114)
at workApps.Lazaruss1.App.main(App.java:80)
The code exits after this point and the database is not changed.
What i want is to eliminate these exceptions completely. How do i configure WebClient to stop acting like such a jerk ?