带有 HTML 单元的空指针异常



我正在使用htmlunit-2/.9版本,当我尝试获取当前的HTML页面内容并将其保存到临时文件以供将来参考时,当我调用currentPage.asXml()时,我收到空指针异常。

任何指针或帮助将不胜感激。

下面是堆栈跟踪:

java.lang.NullPointerException
    at **com.gargoylesoftware.htmlunit.SgmlPage.asXml(SgmlPage.java:206)**
    at com.yahoo.vis.ddbuilder.validator.DDBuilderValidator.validateTemplate_1(DDBuilderValidator.java:308)
    at com.yahoo.vis.ddbuilder.validator.DDBuilderValidator.validate(DDBuilderValidator.java:72)
    at sun.reflect.GeneratedMethodAccessor78.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.yahoo.robot.components.interfaces.Executable.run(Executable.java:73)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)

下面是导致空指针的代码片段。我正在为大约 100 个测试用例运行此测试,在 100 个测试用例中,它将随机失败 20-30 个案例

private IValidationResponse validateTemplate_2(String url, Properties verifyProps, HtmlPage currentPage) throws FailingHttpStatusCodeException, MalformedURLException, IOException
    {
        IValidationResponse validationResponse = new DefaultValidationResponse();
        String query = verifyProps.getProperty(IConstants.QUERY);
        System.err.println("Verifying Query ::- "+query);
        validationResponse.setQuery(query);
        validationResponse.setActualResponseAsBuffer(new StringBuffer(currentPage.asXml()));
...
}

HtmlPage扩展了SgmlPage类,我已经为asXml()浏览了SgmlPage的源代码。

它在内部调用另一个方法getDocumentElement()该方法返回DomElement

从源代码中,这些是方法:

 @Override
   public String asXml() {
       return getDocumentElement().asXml(); // This is Line 206, From your error trace
   }
public DomElement  getDocumentElement() {
        DomNode childNode = getFirstChild();
        while (childNode != null && !(childNode instanceof DomElement)) {
           childNode = childNode.getNextSibling();
       }
       return (DomElement) childNode;
}

在这里,childNode有可能为 NULL。如果childNode返回 NULL,则调用 getDocumentElement().asXml(); 将抛出NullPointerException

PS.:您尚未提供任何详细信息,您如何调用方法以及您正在传递的内容。所以,我无法帮助找到根本原因但是,我希望这至少可以帮助您了解为什么会出现错误。

最新更新