Here is the situation:

We add a <use> element to an existing DOM tree with:

Element e = document.createElementNS(SVGDOMImplementation.SVG_NAMESPACE_URI,
"use");
e.setAttributeNS(null, "x", "10" );
e.setAttributeNS(null, "y", "20" );
e.setAttributeNS(XLinkSupport.XLINK_NAMESPACE_URI, "href", "#MyRef" );

When we try to transcode the DOM, Batik dumps the stacktrace below.

java.lang.NullPointerException
        at org.apache.batik.bridge.URIResolver.getNode(URIResolver.java:86)
        at org.apache.batik.bridge.URIResolver.getElement(URIResolver.java:62)
        at
org.apache.batik.bridge.BridgeContext.getReferencedElement(BridgeContext.jav
a:277)
        at
org.apache.batik.bridge.SVGUseElementBridge.createGraphicsNode(SVGUseElement
Bridge.java:64)
        at
org.apache.batik.bridge.GVTBuilder.buildGraphicsNode(GVTBuilder.java:170)
        at org.apache.batik.bridge.GVTBuilder.buildComposite(GVTBuilder.java:136)
        at
org.apache.batik.bridge.GVTBuilder.buildGraphicsNode(GVTBuilder.java:176)
        at org.apache.batik.bridge.GVTBuilder.buildComposite(GVTBuilder.java:136)
        at
org.apache.batik.bridge.GVTBuilder.buildGraphicsNode(GVTBuilder.java:176)
        at org.apache.batik.bridge.GVTBuilder.buildComposite(GVTBuilder.java:136)
        at
org.apache.batik.bridge.GVTBuilder.buildGraphicsNode(GVTBuilder.java:176)
        at org.apache.batik.bridge.GVTBuilder.buildComposite(GVTBuilder.java:136)
        at org.apache.batik.bridge.GVTBuilder.build(GVTBuilder.java:69)
        at
org.apache.batik.transcoder.image.ImageTranscoder.transcode(ImageTranscoder.
java:155)
        at
org.apache.batik.transcoder.XMLAbstractTranscoder.transcode(XMLAbstractTrans
coder.java:126)
        at
com.codesense.financial.iserver.test.TestRunner.savePNG(TestRunner.java:230)
        at
com.codesense.financial.iserver.test.TestRunner.runTest(TestRunner.java:131)
        at
com.codesense.financial.iserver.test.TestRunner.main(TestRunner.java:326)


Looking at URIResolver.getNode()
...
        if (uri.startsWith("#")) {
            return document.getElementById(uri.substring(1));
        }

        if (documentURI == null)
            documentURI = document.getURL();

        if (documentURI.equals(uri)) {
            return document;
        }
...

and SVGOMDocument.getURL()
       return (url == null) ? null : url.toString();

It´s clear that there´s a bug in getNode(), but is that really the problem?
When we serializes the DOM to a textfile
(org.apache.batik.dom.util.DOMUtilities.writeDocument)
the "href" attribute of the <use> have a missing namespace prefix.

Thoughts anyone? This is a showstopper right now for us..


Regards, Andreas Bielk

/**********************************************************
                  C o d e S e n s e  A B
       Marinens väg 30, SE-136 40 Haninge, Sweden
Office: +46 (0)8 - 707 32 30  GSM: +46 (0)70 - 532 92 01
                 http://www.codesense.com
***********************************************************/
    (PGP public key available at: search.keyserver.net)


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to