[Practicalxml-commits] SF.net SVN: practicalxml:[80] trunk/src
Brought to you by:
kdgregory
From: Auto-Generated S. C. M. <pra...@li...> - 2009-04-28 17:54:28
|
Revision: 80 http://practicalxml.svn.sourceforge.net/practicalxml/?rev=80&view=rev Author: kdgregory Date: 2009-04-28 17:54:17 +0000 (Tue, 28 Apr 2009) Log Message: ----------- XmlBuilder: output routines now properly handle comments (using SAX extension class) Modified Paths: -------------- trunk/src/main/java/net/sf/practicalxml/builder/CommentNode.java trunk/src/main/java/net/sf/practicalxml/builder/ElementNode.java trunk/src/main/java/net/sf/practicalxml/builder/XmlBuilder.java trunk/src/test/java/net/sf/practicalxml/builder/TestXmlBuilder.java Modified: trunk/src/main/java/net/sf/practicalxml/builder/CommentNode.java =================================================================== --- trunk/src/main/java/net/sf/practicalxml/builder/CommentNode.java 2009-04-27 12:41:46 UTC (rev 79) +++ trunk/src/main/java/net/sf/practicalxml/builder/CommentNode.java 2009-04-28 17:54:17 UTC (rev 80) @@ -16,6 +16,9 @@ import org.w3c.dom.Comment; import org.w3c.dom.Element; +import org.xml.sax.ContentHandler; +import org.xml.sax.SAXException; +import org.xml.sax.ext.LexicalHandler; /** @@ -40,4 +43,14 @@ Comment node = parent.getOwnerDocument().createComment(_content); parent.appendChild(node); } + + + @Override + protected void toSAX(ContentHandler handler) throws SAXException + { + if (handler instanceof LexicalHandler) + { + ((LexicalHandler)handler).comment(_content.toCharArray(), 0, _content.length()); + } + } } Modified: trunk/src/main/java/net/sf/practicalxml/builder/ElementNode.java =================================================================== --- trunk/src/main/java/net/sf/practicalxml/builder/ElementNode.java 2009-04-27 12:41:46 UTC (rev 79) +++ trunk/src/main/java/net/sf/practicalxml/builder/ElementNode.java 2009-04-28 17:54:17 UTC (rev 80) @@ -85,8 +85,10 @@ /** - * Invokes the passed <code>ContentHandler</code> for this element - * and its children. + * Invokes the passed <code>ContentHandler</code> for this element and + * its children. Note that the implementation class must also implement + * <code>LexicalHandler</code> to receive events from all nodes in the + * tree (particularly comments). */ @Override protected void toSAX(ContentHandler handler) @@ -106,12 +108,6 @@ * not insert whitespace between elements. Note that you <em>must</em> * use UTF-8 encoding or add a prologue that specifies encoding when * writing this string to a stream. - * <p> - * <em>Warning:</em> - * This method uses a SAX transformer, to minimize footprint. However, - * SAX does not support comment modes, so they will be silently dropped. - * If they are important to you, call {@link #toDOM} and use {@link - * net.sf.practicalxml.OutputUtil#compactString} to generate output. */ @Override public String toString() @@ -128,12 +124,6 @@ * This is the best choice for writing log output. If you write this string * to a stream, you <em>must</em> use UTF-8 encoding or attach a prologue * that specifies the encoding used. - * <p> - * <em>Warning:</em> - * This method uses a SAX transformer, to minimize footprint. However, - * SAX does not support comment modes, so they will be silently dropped. - * If they are important to you, call {@link #toDOM} and use {@link - * net.sf.practicalxml.OutputUtil#indentedString} to generate output. */ public String toString(int indentSize) { @@ -147,12 +137,6 @@ * <p> * This is the best choice for writing XML that will be read by another * party. - * <p> - * <em>Warning:</em> - * This method uses a SAX transformer, to minimize footprint. However, - * SAX does not support comment modes, so they will be silently dropped. - * If they are important to you, call {@link #toDOM} and use {@link - * net.sf.practicalxml.OutputUtil#compactStream} to generate output. */ public void toStream(OutputStream out) { @@ -164,12 +148,6 @@ * Writes the tree rooted at this element to an <code>OutputStream</code>, * using a specified encoding, without a prologue or whitepspace between * nodes. - * <p> - * <em>Warning:</em> - * This method uses a SAX transformer, to minimize footprint. However, - * SAX does not support comment modes, so they will be silently dropped. - * If they are important to you, call {@link #toDOM} and use {@link - * net.sf.practicalxml.OutputUtil#compactStream} to generate output. */ public void toStream(OutputStream out, String encoding) { Modified: trunk/src/main/java/net/sf/practicalxml/builder/XmlBuilder.java =================================================================== --- trunk/src/main/java/net/sf/practicalxml/builder/XmlBuilder.java 2009-04-27 12:41:46 UTC (rev 79) +++ trunk/src/main/java/net/sf/practicalxml/builder/XmlBuilder.java 2009-04-28 17:54:17 UTC (rev 80) @@ -97,9 +97,9 @@ /** * Creates a comment node. * <p> - * <em>Warning</em>: - * Comment nodes are not reported by SAX sources. If comments are - * important to you, convert to DOM before serialization. + * <em>Warning:</em> + * Comment nodes are only reported to SAX content handlers that also + * implement <code>org.xml.sax.ext.LexicalHandler</code>. */ public static Node comment(String text) { Modified: trunk/src/test/java/net/sf/practicalxml/builder/TestXmlBuilder.java =================================================================== --- trunk/src/test/java/net/sf/practicalxml/builder/TestXmlBuilder.java 2009-04-27 12:41:46 UTC (rev 79) +++ trunk/src/test/java/net/sf/practicalxml/builder/TestXmlBuilder.java 2009-04-28 17:54:17 UTC (rev 80) @@ -32,6 +32,7 @@ import org.w3c.dom.ProcessingInstruction; import org.xml.sax.Attributes; import org.xml.sax.ContentHandler; +import org.xml.sax.ext.LexicalHandler; import net.sf.practicalxml.AbstractTestCase; import net.sf.practicalxml.DomUtil; @@ -72,7 +73,7 @@ { return (ContentHandler)Proxy.newProxyInstance( ContentHandler.class.getClassLoader(), - new Class[] { ContentHandler.class }, + new Class[] { ContentHandler.class, LexicalHandler.class }, this); } @@ -82,7 +83,7 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { - // this is a hack for characters + // this is a hack for characters() and comment() for (int ii = 0 ; ii < args.length ; ii++) { if (args[ii] instanceof char[]) @@ -276,11 +277,11 @@ // note: ContentHandler knows nothing of comments MockContentHandler handler = new MockContentHandler(); node.toSAX(handler.getHandler()); - handler.assertInvocationSequence("startElement", "endElement"); + handler.assertInvocationSequence("startElement", "comment", "endElement"); handler.assertInvocation(0, "startElement", null, "foo", "foo"); + handler.assertInvocation(1, "comment", "bar", 0, 3); - -// assertEquals("<foo><!--bar--></foo>", node.toString()); + assertEquals("<foo><!--bar--></foo>", node.toString()); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |