Menu ▾ ▴

#1830 ClassCast exception loading page

2.23
closed
RBRi
None
1
2017-05-30
2016-10-10
Marc
No

I'm getting ClassCastExceptions when loading certain pages which include links to maps.

java.lang.ClassCastException: com.gargoylesoftware.htmlunit.svg.SvgElement cannot be cast to com.gargoylesoftware.htmlunit.html.HtmlElement
    at com.gargoylesoftware.htmlunit.html.HtmlPage.getDocumentElement(HtmlPage.java:328)
    at com.gargoylesoftware.htmlunit.html.HtmlPage.getBody(HtmlPage.java:336)
    at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.startElement(HTMLParser.java:548)
    at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
    at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.startElement(HTMLParser.java:511)
    at net.sourceforge.htmlunit.cyberneko.HTMLTagBalancer.callStartElement(HTMLTagBalancer.java:1203)
    at net.sourceforge.htmlunit.cyberneko.HTMLTagBalancer.startElement(HTMLTagBalancer.java:783)
    at net.sourceforge.htmlunit.cyberneko.filters.DefaultFilter.startElement(DefaultFilter.java:137)
    at net.sourceforge.htmlunit.cyberneko.filters.NamespaceBinder.startElement(NamespaceBinder.java:286)
    at net.sourceforge.htmlunit.cyberneko.HTMLScanner$ContentScanner.scanStartElement(HTMLScanner.java:2772)
    at net.sourceforge.htmlunit.cyberneko.HTMLScanner$ContentScanner.scan(HTMLScanner.java:2117)
    at net.sourceforge.htmlunit.cyberneko.HTMLScanner.scanDocument(HTMLScanner.java:927)
    at net.sourceforge.htmlunit.cyberneko.HTMLConfiguration.parse(HTMLConfiguration.java:506)
    at net.sourceforge.htmlunit.cyberneko.HTMLConfiguration.parse(HTMLConfiguration.java:459)
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.parse(HTMLParser.java:979)
    at com.gargoylesoftware.htmlunit.html.HTMLParser.parse(HTMLParser.java:241)
    at com.gargoylesoftware.htmlunit.html.HTMLParser.parseHtml(HTMLParser.java:187)
    at com.gargoylesoftware.htmlunit.DefaultPageCreator.createHtmlPage(DefaultPageCreator.java:269)
    at com.gargoylesoftware.htmlunit.DefaultPageCreator.createPage(DefaultPageCreator.java:157)
    at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:512)
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:386)
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:304)
    at com.gargoylesoftware.htmlunit.html.BaseFrameElement.loadInnerPageIfPossible(BaseFrameElement.java:184)
    at com.gargoylesoftware.htmlunit.html.BaseFrameElement.loadInnerPage(BaseFrameElement.java:122)
    at com.gargoylesoftware.htmlunit.html.HtmlPage.loadFrames(HtmlPage.java:1818)
    at com.gargoylesoftware.htmlunit.html.HtmlPage.initialize(HtmlPage.java:226)
    at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:519)
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:386)
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:304)
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:468)
    at com.iccenter.integrationtest.tools.HtmlUnitRunner.browser_getPage(HtmlUnitRunner.java:21)
    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:498)
    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)
    Suppressed: java.lang.ClassCastException: com.gargoylesoftware.htmlunit.svg.SvgElement cannot be cast to com.gargoylesoftware.htmlunit.html.HtmlElement
        at com.gargoylesoftware.htmlunit.html.HtmlPage.getDocumentElement(HtmlPage.java:328)
        at com.gargoylesoftware.htmlunit.html.HtmlPage.executeEventHandlersIfNeeded(HtmlPage.java:1187)
        at com.gargoylesoftware.htmlunit.html.HtmlPage.cleanUp(HtmlPage.java:308)
        at com.gargoylesoftware.htmlunit.WebWindowImpl.removeChildWindow(WebWindowImpl.java:225)
        at com.gargoylesoftware.htmlunit.WebWindowImpl.destroyChildren(WebWindowImpl.java:207)
        at com.gargoylesoftware.htmlunit.TopLevelWindow.close(TopLevelWindow.java:126)
        at com.gargoylesoftware.htmlunit.WebClient.close(WebClient.java:1799)
        at com.iccenter.integrationtest.tools.HtmlUnitRunner.browser_getPage(HtmlUnitRunner.java:22)
        ... 23 more

I'm adding one test which loads a page and throws this exception when running against a particular page (which is not mine, so please don't use in automated tests).

The page is http://www.settmarshausen.de/includes/map.html.

Thanks.

1 Attachments

Discussion

  • RBRi

    RBRi - 2016-11-07
    • status: open --> accepted
     
  • RBRi

    RBRi - 2016-11-07

    Ok,i know the root of the problem but have to think about a possible solution.

     
  • Ahmed Ashour

    Ahmed Ashour - 2017-01-11

    Well, I guess we should not have SvgPage at all!

    Should the below be SvgPage or HtmlPage? It has the svg element rendered, and the javascript saying HTMLDocument.

    <svg xmlns="http://www.w3.org/2000/svg">
    <rect id="rect" width="50" height="50" fill="green" onclick="alert(document.getElementById('rect'))"/>
    <head><title>foo</title><script>
      function test() {
          alert(document);
      }
    </script></head><body onload='test()'>
    hello<p>
    </body></svg>
    
     

    Last edit: Ahmed Ashour 2017-01-11
  • Ahmed Ashour

    Ahmed Ashour - 2017-01-11

    Well, this proves the page is indeed an HtmlPage.

    alert(document.documentElement.outerHTML);

    I am deleting/deprecating SvgPage/InteractivPage unless someone complains.

     
  • Ahmed Ashour

    Ahmed Ashour - 2017-05-29

    The below case still fails:

    <html xmlns="http://www.w3.org/2000/svg">
    <rect id="rect" width="50" height="50" fill="green" onclick="alert(document.getElementById('rect'))"/>
    <head><title>foo</title><script>
      function test() {
          alert(document.documentElement);
      }
    </script></head><body onload='test()'>
    hello<p>
    </body></html>
    
     
  • Ahmed Ashour

    Ahmed Ashour - 2017-05-30
    • status: accepted --> closed
    • assigned_to: RBRi
     
  • Ahmed Ashour

    Ahmed Ashour - 2017-05-30

    Thanks to Ronald, the exception is fixed.

    Now, there is another error, but it needs to be isolated as hinted in http://htmlunit.sourceforge.net/submittingJSBugs.html

     

Log in to post a comment.