mitchell bass created BATIK-1144:
------------------------------------

             Summary: a text animation faults with null pointer exception, when 
scripting with java
                 Key: BATIK-1144
                 URL: https://issues.apache.org/jira/browse/BATIK-1144
             Project: Batik
          Issue Type: Bug
          Components: Animation engine, Bridge, Scripting
    Affects Versions: 1.8
         Environment: first noticed on windows 7,  jdk 1.8
            Reporter: mitchell bass


when trying to dynamically animate a color change for a text element, got a 
null pointer exception in the SVGOMAnimationElement:beginElement() method 
because getSvgContext was returning null.

introspection with a debugger turned up the fact that in 
SVGTextElementBridge.handleDOMNodeInsertedEvent(MutationEvent evt) the setting 
of the svg context was not being done. this is called when the animation 
element is appended as a child to the text element.

SVGTextElementBridge extends AbstractGraphicsNodeBridge and in particular 
overrides handleDOMNodeInsertedEvent(MutationEvent evt) which would normally 
set the svg context.

as a local fix changing 
SVGTextElementBridge.handleDOMNodeInsertedEvent(MutationEvent evt) and how it 
handles an ELEMENT node from:
    public void handleDOMNodeInsertedEvent(MutationEvent evt) {
        Node childNode = (Node)evt.getTarget();

        //check the type of the node inserted before discard the layout
        //in the case of <title> or <desc> or <metadata>, the layout
        //is unchanged
        switch(childNode.getNodeType()) {
            case Node.TEXT_NODE:        // fall-through is intended
            case Node.CDATA_SECTION_NODE:
                laidoutText = null;
                break;
            case Node.ELEMENT_NODE: {
                Element childElement = (Element)childNode;
                if (isTextChild(childElement)) {
                    addContextToChild(ctx, childElement);
                    laidoutText = null;
                }
                break;
            }
        }
        if (laidoutText == null) {
            computeLaidoutText(ctx, e, getTextNode());
        }
    }
--
to fix, added else to isTextChild conditional, to:

    public void handleDOMNodeInsertedEvent(MutationEvent evt) {
        Node childNode = (Node)evt.getTarget();

        //check the type of the node inserted before discard the layout
        //in the case of <title> or <desc> or <metadata>, the layout
        //is unchanged
        switch(childNode.getNodeType()) {
            case Node.TEXT_NODE:        // fall-through is intended
            case Node.CDATA_SECTION_NODE:
                laidoutText = null;
                break;
            case Node.ELEMENT_NODE: {
                Element childElement = (Element)childNode;
                if (isTextChild(childElement)) {
                    addContextToChild(ctx, childElement);
                    laidoutText = null;
                }
               // ADDED ELSE so animation nodes get std treatment
                else {
                        super.handleDOMNodeInsertedEvent(evt);
                }
                break;
            }
        }
        if (laidoutText == null) {
            computeLaidoutText(ctx, e, getTextNode());
        }
    }

--

not clear that this is a complete fix or not.






--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to