Получение исключения NULL-указателя net.sf.saxon.event.ReceivingContentHandler.startElement в DaisyDiff - PullRequest
0 голосов
/ 08 февраля 2019

Я использую библиотеку DaizyDIff для сравнения двух HTML-файлов.Я написал Java-код для реализации DaizyDiff.но во время работы я получаю исключение NULL-указателя на net.sf.saxon.event.ReceivingContentHandler.startElement

У меня есть несколько подходов на SAXTransformerFactory, но я не могу выяснить

public static void daisyDiffTest() throws Exception {
    String html1 = "<html><body>var v2</body></html>";
    String html2 = "<html>  \n  <body>  \n  Hello world  \n  </body>  \n  </html>";

    try {
        StringWriter finalResult = new StringWriter();
        SAXTransformerFactory tf = (SAXTransformerFactory) SAXTransformerFactory.newInstance();
        TransformerHandler result = tf.newTransformerHandler();
        result.getTransformer().setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
        result.getTransformer().setOutputProperty(OutputKeys.INDENT, "yes");
        result.getTransformer().setOutputProperty(OutputKeys.METHOD, "html");
        result.getTransformer().setOutputProperty(OutputKeys.ENCODING, "UTF-8");
        result.setResult(new StreamResult(finalResult));

        ContentHandler postProcess = result;
        Locale val = Locale.ENGLISH;
        DaisyDiff.diffHTML(new InputSource(new StringReader(html1)), new InputSource(new StringReader(html2)),
                postProcess, "test", val);
        System.out.println(finalResult.toString());
    } catch (SAXException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

Ожидаемый результат будет отличаться в файле HTML.

1 Ответ

0 голосов
/ 11 февраля 2019

Трудно понять, не зная, что такое DaisyDiff или как он звонит.Вполне возможно, что он не проверен и не поддерживается для использования с Saxon.

Формат данных, передаваемых в событие startElement () в SAX ContentHandler, зависит от параметров конфигурации синтаксического анализатора XML и проблемы, когда Saxonвызывается как ContentHandler таким образом, что он не может обнаружить, какие параметры конфигурации использует синтаксический анализатор.

Как указано в документации Javadoc здесь: http://www.saxonica.com/documentation/index.html#!javadoc/net.sf.saxon.event/ReceivingContentHandler@startElement если события, отправленныесинтаксический анализатор не соответствует тому, что испускает правильно сконфигурированный синтаксический анализатор, ReceivingContentHandler завершится сбоем непредсказуемым образом.

Публикация трассировки стека исключения может быть полезной.

...