Почему я получаю NPE при попытке обновить атрибут "видимости" элементов SVG с помощью Apache Batiq? - PullRequest
0 голосов
/ 17 июня 2019

Я просто пытаюсь обновить атрибут «видимость» пары элементов в моей строке SVG с помощью Apache Batiq, но я получаю исключения NullPointerExceptions при попытке сделать это.

Я использую SVGDocument от Batiq и получаю SVGOMElements, которые мне нужно обновить.Я попытался обновить Element.getStyle (), который возвращает null, поэтому прибегнул к SVGOMElement.updateAttributeValue (), который также генерирует исключение NullPointerException из-за того, что я не передаю AnimatableValue (зачем это вообще нужно?)

Вот моя строка SVG:

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="product-svg" version="1.1" x="0.0" y="0.0" xml:space="preserve" viewBox="0.0 0.0 792.0 936.0">
<rect id="product-bounds" x="0.0" y="0.0" width="792.0" height="936.0" fill="#d20c0c" visibility="hidden"></rect>
<g id="shadow-elements">
    <rect x="108.0" y="108.0" width="576.0" height="720.0" fill="#FFFFFF" style="filter:url(#d-shadow)"></rect>
</g>
</svg>

А вот моя попытка скрыть «границы продукта» и «элементы-тени»:

    StringReader reader = new StringReader(svg);

    try {
        String parser = XMLResourceDescriptor.getXMLParserClassName();
        SAXSVGDocumentFactory f = new SAXSVGDocumentFactory(parser);
        SVGDocument doc = f.createSVGDocument("/",reader);

        SVGOMRectElement bounds = (SVGOMRectElement) doc.getElementById("product-bounds");
        bounds.updateAttributeValue("visibility", "visible", null);

        SVGOMGElement shadows = (SVGOMGElement) doc.getElementById("shadow-elements");
        shadows.updateAttributeValue("visibility", "hidden", null);

        return doc.toString();
    } catch (Exception ex) {
        ex.printStackTrace();
        throw new RuntimeException(ex);
    } finally {
        reader.close();
    }

Я такжепопытался обновить bounds.getStyle (), но безуспешно, поскольку он отображается как ноль.

Я ожидаю, что doc.toString () вернет вышеуказанный SVG с видимостью границ продукта, установленной в visible, и shadow-элементы должны быть установлены как «скрытые», но вместо этого я получаю исключение NullPointerException:

java.lang.NullPointerException в org.apache.batik.anim.dom.SVGOMElement.updateAttributeValue (SVGOMElement.java:702)

...