0

htmlunit-2 / .9バージョンを使用していますが、現在のHTMLページのコンテンツを取得して、将来の参照用に一時ファイルに保存しようとすると、を呼び出すとnullポインター例外が発生します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)

以下は、NULLポインターの原因となっているコードスニペットです。私はこのテストを約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()));
...

}
4

1 に答える 1

0

HtmlPageextendsクラスとforのSgmlPageソース コードを確認しました。SgmlPageasXml()

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 になる可能性があります。childNodeNULL が返された場合 、呼び出すgetDocumentElement().asXml();と がスローされNullPointerExceptionます。

PS .:メソッドをどのように呼び出し、どのコンテンツを渡すかについての詳細は提供していません。したがって、根本的な原因を見つけることはできませんが、少なくともエラーが発生する理由を理解するのに役立つことを願っています.

于 2012-10-11T07:42:36.263 に答える