[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.
|