[jira] [Updated] (BATIK-1144) a text animation faults with null pointer exception, when scripting with java

"simon steiner (JIRA)" <[email protected]>
Newsgroups gmane.text.xml.batik.devel
Message-ID <[email protected]>
     [ https://issues.apache.org/jira/browse/BATIK-1144?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

simon steiner updated BATIK-1144:
---------------------------------
    Description: 
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:
{code}
    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());
        }
    }
{code}
--

not clear that this is a complete fix or not.




  was:
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.





> 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:
> {code}
>     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());
>         }
>     }
> {code}
> --
> not clear that this is a complete fix or not.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.