2012-10-11 34 views
0

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

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

这里是堆栈跟踪:

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())); 
... 

} 
+1

您可以添加'currentPage.asXml()'代码' –

+0

currentPage是HtmlPage的对象,它是HTMLUnit类。 asXml()是HtmlUnit的API – user1736934

+0

请阅读FAQ部分以更好地使用SO。它也将有助于未来的参考。 –

回答

0

HtmlPage扩展SgmlPage类,我已经通过​​源代码走了asXml()

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

From Source Code,这些都是方法:

@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:你还没有提供任何细节如何调用方法和你传递的内容。所以,我不禁要找到根本原因但是,我希望这至少能帮助你理解你为什么会得到这个错误。