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]