Author: schulte
Date: Sun Jan  8 04:10:41 2017
New Revision: 1777861

URL: http://svn.apache.org/viewvc?rev=1777861&view=rev
Log:
[MSHARED-610] PrettyPrintXMLWriter internally uses java.io.PrintWriter without 
checking for any errors.

o Updated the 'XMLWriter' interface method to allow implementations to throw
  'IOException's and made the implementations stop silently ignore any IO
  errors. This commit makes the API for writig match the API for reading which
  also throws 'IOException's.


Modified:
    
maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/xml/PrettyPrintXMLWriter.java
    
maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/xml/XMLWriter.java
    
maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/xml/XmlWriterUtil.java
    
maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/xml/Xpp3Dom.java
    
maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/xml/Xpp3DomWriter.java
    
maven/shared/trunk/maven-shared-utils/src/test/java/org/apache/maven/shared/utils/xml/PrettyPrintXmlWriterTest.java

Modified: 
maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/xml/PrettyPrintXMLWriter.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/xml/PrettyPrintXMLWriter.java?rev=1777861&r1=1777860&r2=1777861&view=diff
==============================================================================
--- 
maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/xml/PrettyPrintXMLWriter.java
 (original)
+++ 
maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/xml/PrettyPrintXMLWriter.java
 Sun Jan  8 04:10:41 2017
@@ -19,11 +19,11 @@ package org.apache.maven.shared.utils.xm
  * under the License.
  */
 
-import org.apache.maven.shared.utils.Os;
-
+import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.Writer;
 import java.util.ArrayList;
+import org.apache.maven.shared.utils.Os;
 
 /**
  * XMLWriter with nice indentation
@@ -64,6 +64,7 @@ public class PrettyPrintXMLWriter
     /**
      * @param writer not null
      * @param lineIndent could be null, but the normal way is some spaces.
+     * @throws IOException if {@code writer} is in error state.
      */
     public PrettyPrintXMLWriter( PrintWriter writer, String lineIndent )
     {
@@ -160,6 +161,7 @@ public class PrettyPrintXMLWriter
     private PrettyPrintXMLWriter( PrintWriter writer, char[] lineIndent, 
char[] lineSeparator, String encoding,
                                   String doctype )
     {
+        super();
         this.writer = writer;
         this.lineIndent = lineIndent;
         this.lineSeparator = lineSeparator;
@@ -167,10 +169,13 @@ public class PrettyPrintXMLWriter
         this.docType = doctype;
 
         depth = 0;
+
+        // Fail early with assertions enabled. Issue is in the calling code 
not having checked for any errors.
+        assert !writer.checkError() : "Unexpected error state PrintWriter 
passed to PrettyPrintXMLWriter.";
     }
 
     /** {@inheritDoc} */
-    public void addAttribute( String key, String value )
+    public void addAttribute( String key, String value ) throws IOException
     {
         if ( !processingElement )
         {
@@ -181,6 +186,10 @@ public class PrettyPrintXMLWriter
         writer.write( key );
         writer.write( '=' );
         XMLEncode.xmlEncodeTextAsPCDATA( value, true, '"', writer );
+        if ( writer.checkError() )
+        {
+            throw new IOException( "Failure adding attribute '" + key + "' 
with value '" + value + "'" );
+        }
     }
 
     /** {@inheritDoc} */
@@ -232,7 +241,7 @@ public class PrettyPrintXMLWriter
     }
 
     /** {@inheritDoc} */
-    public void startElement( String elementName )
+    public void startElement( String elementName ) throws IOException
     {
         boolean firstLine = ensureDocumentStarted();
 
@@ -245,6 +254,10 @@ public class PrettyPrintXMLWriter
 
         writer.write( '<' );
         writer.write( elementName );
+        if ( writer.checkError() )
+        {
+            throw new IOException( "Failure starting element '" + elementName 
+ "'." );
+        }
 
         processingElement = true;
 
@@ -252,7 +265,7 @@ public class PrettyPrintXMLWriter
     }
 
     /** {@inheritDoc} */
-    public void writeText( String text )
+    public void writeText( String text ) throws IOException
     {
         ensureDocumentStarted();
 
@@ -261,20 +274,30 @@ public class PrettyPrintXMLWriter
         XMLEncode.xmlEncodeText( text, writer );
 
         endOnSameLine = true;
+        
+        if ( writer.checkError() )
+        {
+            throw new IOException( "Failure writing text." );
+        }
     }
 
     /** {@inheritDoc} */
-    public void writeMarkup( String markup )
+    public void writeMarkup( String markup ) throws IOException
     {
         ensureDocumentStarted();
 
         completePreviouslyOpenedElement();
 
         writer.write( markup );
+
+        if ( writer.checkError() )
+        {
+            throw new IOException( "Failure writing markup." );
+        }
     }
 
     /** {@inheritDoc} */
-    public void endElement()
+    public void endElement() throws IOException
     {
         String chars = elementStack.get( --depth );
         if ( processingElement )
@@ -298,6 +321,11 @@ public class PrettyPrintXMLWriter
         }
 
         endOnSameLine = false;
+
+        if ( writer.checkError() )
+        {
+            throw new IOException( "Failure ending element." );
+        }
     }
 
     /**

Modified: 
maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/xml/XMLWriter.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/xml/XMLWriter.java?rev=1777861&r1=1777860&r2=1777861&view=diff
==============================================================================
--- 
maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/xml/XMLWriter.java
 (original)
+++ 
maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/xml/XMLWriter.java
 Sun Jan  8 04:10:41 2017
@@ -19,6 +19,7 @@ package org.apache.maven.shared.utils.xm
  * under the License.
  */
 
+import java.io.IOException;
 
 /**
  * Interface for tools writing XML files.
@@ -48,8 +49,9 @@ public interface XMLWriter
     /**
      * Start an XML Element tag.
      * @param name The name of the tag.
+     * @throws IOException if starting the element fails.
      */
-    void startElement( String name );
+    void startElement( String name ) throws IOException;
 
 
     /**
@@ -58,27 +60,31 @@ public interface XMLWriter
      * @param key The key of the attribute.
      * @param value The value of the attribute.
      * @throws IllegalStateException if no element tag is currently in process
+     * @throws IOException if adding the attribute fails.
      */
-    void addAttribute( String key, String value );
+    void addAttribute( String key, String value ) throws IOException;
 
     /**
      * Add a value text to the current element tag
      * This will perform XML escaping to guarantee valid content
      * @param text The text which should be written.
      * @throws IllegalStateException if no element tag got started yet
+     * @throws IOException if writing the text fails.
      */
-    void writeText( String text );
+    void writeText( String text ) throws IOException;
 
     /**
      * Add a preformatted markup to the current element tag
      * @param text The text which should be written.
      * @throws IllegalStateException if no element tag got started yet
+     * @throws IOException if writing the markup fails.
      */
-    void writeMarkup( String text );
+    void writeMarkup( String text ) throws IOException;
 
     /**
      * End the previously opened element.
      * @see #startElement(String)
+     * @throws IOException if ending the element fails.
      */
-    void endElement();
+    void endElement() throws IOException;
 }

Modified: 
maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/xml/XmlWriterUtil.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/xml/XmlWriterUtil.java?rev=1777861&r1=1777860&r2=1777861&view=diff
==============================================================================
--- 
maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/xml/XmlWriterUtil.java
 (original)
+++ 
maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/xml/XmlWriterUtil.java
 Sun Jan  8 04:10:41 2017
@@ -19,6 +19,7 @@ package org.apache.maven.shared.utils.xm
  * under the License.
  */
 
+import java.io.IOException;
 import org.apache.maven.shared.utils.StringUtils;
 
 /**
@@ -42,8 +43,9 @@ public class XmlWriterUtil
      * Convenience method to write one <code>CRLF</code>.
      *
      * @param writer not null writer
+     * @throws IOException if writing fails.
      */
-    public static void writeLineBreak( XMLWriter writer )
+    public static void writeLineBreak( XMLWriter writer ) throws IOException
     {
         writeLineBreak( writer, 1 );
     }
@@ -53,8 +55,9 @@ public class XmlWriterUtil
      *
      * @param writer not null
      * @param repeat positive number
+     * @throws IOException if writing fails.
      */
-    public static void writeLineBreak( XMLWriter writer, int repeat )
+    public static void writeLineBreak( XMLWriter writer, int repeat ) throws 
IOException
     {
         for ( int i = 0; i < repeat; i++ )
         {
@@ -70,8 +73,9 @@ public class XmlWriterUtil
      * @param indent positive number
      * @see #DEFAULT_INDENTATION_SIZE
      * @see #writeLineBreak(XMLWriter, int, int, int)
+     * @throws IOException if writing fails.
      */
-    public static void writeLineBreak( XMLWriter writer, int repeat, int 
indent )
+    public static void writeLineBreak( XMLWriter writer, int repeat, int 
indent ) throws IOException
     {
         writeLineBreak( writer, repeat, indent, DEFAULT_INDENTATION_SIZE );
     }
@@ -83,8 +87,9 @@ public class XmlWriterUtil
      * @param repeat The number of repetitions of the indent
      * @param indent positive number
      * @param indentSize positive number
+     * @throws IOException if writing fails.
      */
-    public static void writeLineBreak( XMLWriter writer, int repeat, int 
indent, int indentSize )
+    public static void writeLineBreak( XMLWriter writer, int repeat, int 
indent, int indentSize ) throws IOException
     {
         writeLineBreak( writer, repeat );
 
@@ -107,8 +112,9 @@ public class XmlWriterUtil
      * @param writer not null
      * @see #DEFAULT_COLUMN_LINE
      * @see #writeCommentLineBreak(XMLWriter, int)
+     * @throws IOException if writing fails.
      */
-    public static void writeCommentLineBreak( XMLWriter writer )
+    public static void writeCommentLineBreak( XMLWriter writer ) throws 
IOException
     {
         writeCommentLineBreak( writer, DEFAULT_COLUMN_LINE );
     }
@@ -118,8 +124,9 @@ public class XmlWriterUtil
      *
      * @param writer not null
      * @param columnSize positive number
+     * @throws IOException if writing fails.
      */
-    public static void writeCommentLineBreak( XMLWriter writer, int columnSize 
)
+    public static void writeCommentLineBreak( XMLWriter writer, int columnSize 
) throws IOException
     {
         if ( columnSize < 10 )
         {
@@ -137,8 +144,9 @@ public class XmlWriterUtil
      * @param comment The comment to write
      * @see #DEFAULT_INDENTATION_SIZE
      * @see #writeComment(XMLWriter, String, int, int)
+     * @throws IOException if writing fails.
      */
-    public static void writeComment( XMLWriter writer, String comment )
+    public static void writeComment( XMLWriter writer, String comment ) throws 
IOException
     {
         writeComment( writer, comment, 0, DEFAULT_INDENTATION_SIZE );
     }
@@ -152,8 +160,9 @@ public class XmlWriterUtil
      * @param indent positive number
      * @see #DEFAULT_INDENTATION_SIZE
      * @see #writeComment(XMLWriter, String, int, int)
+     * @throws IOException if writing fails.
      */
-    public static void writeComment( XMLWriter writer, String comment, int 
indent )
+    public static void writeComment( XMLWriter writer, String comment, int 
indent ) throws IOException
     {
         writeComment( writer, comment, indent, DEFAULT_INDENTATION_SIZE );
     }
@@ -168,8 +177,9 @@ public class XmlWriterUtil
      * @param indentSize positive number
      * @see #DEFAULT_COLUMN_LINE
      * @see #writeComment(XMLWriter, String, int, int, int)
+     * @throws IOException if writing fails.
      */
-    public static void writeComment( XMLWriter writer, String comment, int 
indent, int indentSize )
+    public static void writeComment( XMLWriter writer, String comment, int 
indent, int indentSize ) throws IOException
     {
         writeComment( writer, comment, indent, indentSize, DEFAULT_COLUMN_LINE 
);
     }
@@ -183,8 +193,10 @@ public class XmlWriterUtil
      * @param indent positive number
      * @param indentSize positive number
      * @param columnSize positive number
+     * @throws IOException if writing fails.
      */
     public static void writeComment( XMLWriter writer, String comment, int 
indent, int indentSize, int columnSize )
+        throws IOException
     {
         if ( comment == null )
         {
@@ -263,8 +275,9 @@ public class XmlWriterUtil
      * @param comment The comment to write
      * @see #DEFAULT_INDENTATION_SIZE
      * @see #writeCommentText(XMLWriter, String, int, int)
+     * @throws IOException if writing fails.
      */
-    public static void writeCommentText( XMLWriter writer, String comment )
+    public static void writeCommentText( XMLWriter writer, String comment ) 
throws IOException
     {
         writeCommentText( writer, comment, 0, DEFAULT_INDENTATION_SIZE );
     }
@@ -279,8 +292,9 @@ public class XmlWriterUtil
      * @param indent positive number
      * @see #DEFAULT_INDENTATION_SIZE
      * @see #writeCommentText(XMLWriter, String, int, int)
+     * @throws IOException if writing fails.
      */
-    public static void writeCommentText( XMLWriter writer, String comment, int 
indent )
+    public static void writeCommentText( XMLWriter writer, String comment, int 
indent ) throws IOException
     {
         writeCommentText( writer, comment, indent, DEFAULT_INDENTATION_SIZE );
     }
@@ -295,8 +309,10 @@ public class XmlWriterUtil
      * @param indentSize positive number
      * @see #DEFAULT_COLUMN_LINE
      * @see #writeCommentText(XMLWriter, String, int, int, int)
+     * @throws IOException if writing fails.
      */
     public static void writeCommentText( XMLWriter writer, String comment, int 
indent, int indentSize )
+        throws IOException
     {
         writeCommentText( writer, comment, indent, indentSize, 
DEFAULT_COLUMN_LINE );
     }
@@ -311,8 +327,10 @@ public class XmlWriterUtil
      * @param indent positive number
      * @param indentSize positive number
      * @param columnSize positive number
+     * @throws IOException if writing fails.
      */
     public static void writeCommentText( XMLWriter writer, String comment, int 
indent, int indentSize, int columnSize )
+        throws IOException
     {
         if ( indent < 0 )
         {

Modified: 
maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/xml/Xpp3Dom.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/xml/Xpp3Dom.java?rev=1777861&r1=1777860&r2=1777861&view=diff
==============================================================================
--- 
maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/xml/Xpp3Dom.java
 (original)
+++ 
maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/xml/Xpp3Dom.java
 Sun Jan  8 04:10:41 2017
@@ -19,6 +19,7 @@ package org.apache.maven.shared.utils.xm
  * under the License.
  */
 
+import java.io.IOException;
 import java.io.StringWriter;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -375,10 +376,17 @@ public class Xpp3Dom
     /** {@inheritDoc} */
     public String toString()
     {
-        StringWriter writer = new StringWriter();
-        Xpp3DomWriter.write( getPrettyPrintXMLWriter( writer ), this );
-        return writer.toString();
-
+        try
+        {
+            StringWriter writer = new StringWriter();
+            Xpp3DomWriter.write( getPrettyPrintXMLWriter( writer ), this );
+            return writer.toString();
+        }
+        catch ( final IOException e )
+        {
+            // JDK error in StringWriter.
+            throw new AssertionError( "Unexpected IOException from 
StringWriter." );
+        }
     }
 
     /**
@@ -386,9 +394,17 @@ public class Xpp3Dom
      */
     public String toUnescapedString()
     {
-        StringWriter writer = new StringWriter();
-        Xpp3DomWriter.write( getPrettyPrintXMLWriter( writer ), this, false );
-        return writer.toString();
+        try
+        {
+            StringWriter writer = new StringWriter();
+            Xpp3DomWriter.write( getPrettyPrintXMLWriter( writer ), this, 
false );
+            return writer.toString();
+        }
+        catch ( final IOException e )
+        {
+            // JDK error in StringWriter.
+            throw new AssertionError( "Unexpected IOException from 
StringWriter." );
+        }
     }
 
     private PrettyPrintXMLWriter getPrettyPrintXMLWriter( StringWriter writer )

Modified: 
maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/xml/Xpp3DomWriter.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/xml/Xpp3DomWriter.java?rev=1777861&r1=1777860&r2=1777861&view=diff
==============================================================================
--- 
maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/xml/Xpp3DomWriter.java
 (original)
+++ 
maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/xml/Xpp3DomWriter.java
 Sun Jan  8 04:10:41 2017
@@ -19,6 +19,7 @@ package org.apache.maven.shared.utils.xm
  * under the License.
  */
 
+import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.Writer;
 
@@ -30,8 +31,9 @@ public class Xpp3DomWriter
     /**
      * @param writer {@link Writer}
      * @param dom {@link Xpp3Dom}
+     * @throws IOException if writing fails.
      */
-    public static void write( Writer writer, Xpp3Dom dom )
+    public static void write( Writer writer, Xpp3Dom dom ) throws IOException
     {
         write( new PrettyPrintXMLWriter( writer ), dom );
     }
@@ -39,8 +41,9 @@ public class Xpp3DomWriter
     /**
      * @param writer {@link PrintWriter}
      * @param dom {@link Xpp3Dom}
+     * @throws IOException if writing fails.
      */
-    public static void write( PrintWriter writer, Xpp3Dom dom )
+    public static void write( PrintWriter writer, Xpp3Dom dom ) throws 
IOException
     {
         write( new PrettyPrintXMLWriter( writer ), dom );
     }
@@ -48,8 +51,9 @@ public class Xpp3DomWriter
     /**
      * @param xmlWriter {@link XMLWriter}
      * @param dom {@link Xpp3Dom}
+     * @throws IOException if writing fails.
      */
-    public static void write( XMLWriter xmlWriter, Xpp3Dom dom )
+    public static void write( XMLWriter xmlWriter, Xpp3Dom dom ) throws 
IOException
     {
         write( xmlWriter, dom, true );
     }
@@ -58,8 +62,9 @@ public class Xpp3DomWriter
      * @param xmlWriter {@link XMLWriter}
      * @param dom {@link Xpp3Dom}
      * @param escape true/false.
+     * @throws IOException if writing fails.
      */
-    public static void write( XMLWriter xmlWriter, Xpp3Dom dom, boolean escape 
)
+    public static void write( XMLWriter xmlWriter, Xpp3Dom dom, boolean escape 
) throws IOException
     {
         xmlWriter.startElement( dom.getName() );
         String[] attributeNames = dom.getAttributeNames();

Modified: 
maven/shared/trunk/maven-shared-utils/src/test/java/org/apache/maven/shared/utils/xml/PrettyPrintXmlWriterTest.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-utils/src/test/java/org/apache/maven/shared/utils/xml/PrettyPrintXmlWriterTest.java?rev=1777861&r1=1777860&r2=1777861&view=diff
==============================================================================
--- 
maven/shared/trunk/maven-shared-utils/src/test/java/org/apache/maven/shared/utils/xml/PrettyPrintXmlWriterTest.java
 (original)
+++ 
maven/shared/trunk/maven-shared-utils/src/test/java/org/apache/maven/shared/utils/xml/PrettyPrintXmlWriterTest.java
 Sun Jan  8 04:10:41 2017
@@ -1,5 +1,6 @@
 package org.apache.maven.shared.utils.xml;
 
+import java.io.IOException;
 import javax.swing.text.html.HTML;
 import java.io.StringWriter;
 
@@ -60,7 +61,7 @@ public class PrettyPrintXmlWriterTest
     }
 
     @Test
-    public void testDefaultPrettyPrintXMLWriter()
+    public void testDefaultPrettyPrintXMLWriter() throws IOException
     {
         writer.startElement( HTML.Tag.HTML.toString() );
 
@@ -74,7 +75,7 @@ public class PrettyPrintXmlWriterTest
     }
 
     @Test
-    public void testPrettyPrintXMLWriterWithGivenLineSeparator()
+    public void testPrettyPrintXMLWriterWithGivenLineSeparator() throws 
IOException
     {
         writer.setLineSeparator( "\n" );
 
@@ -90,7 +91,7 @@ public class PrettyPrintXmlWriterTest
     }
 
     @Test
-    public void testPrettyPrintXMLWriterWithGivenLineIndenter()
+    public void testPrettyPrintXMLWriterWithGivenLineIndenter() throws 
IOException
     {
         writer.setLineIndenter( "    " );
 
@@ -106,7 +107,7 @@ public class PrettyPrintXmlWriterTest
     }
 
     @Test
-    public void testEscapeXmlAttributeWindows()
+    public void testEscapeXmlAttributeWindows() throws IOException
     {
         // Windows
         writer.startElement( HTML.Tag.DIV.toString() );
@@ -116,7 +117,7 @@ public class PrettyPrintXmlWriterTest
     }
 
     @Test
-    public void testEscapeXmlAttributeMac()
+    public void testEscapeXmlAttributeMac() throws IOException
     {
         // Mac
         writer.startElement( HTML.Tag.DIV.toString() );
@@ -126,7 +127,7 @@ public class PrettyPrintXmlWriterTest
     }
 
     @Test
-    public void testEscapeXmlAttributeTrailingCR()
+    public void testEscapeXmlAttributeTrailingCR() throws IOException
     {
         // Mac
         writer.startElement( HTML.Tag.DIV.toString() );
@@ -136,7 +137,7 @@ public class PrettyPrintXmlWriterTest
     }
 
     @Test
-    public void testEscapeXmlAttributeUnix()
+    public void testEscapeXmlAttributeUnix() throws IOException
     {
         // Unix
         writer.startElement( HTML.Tag.DIV.toString() );
@@ -145,7 +146,7 @@ public class PrettyPrintXmlWriterTest
         Assert.assertEquals( "<div class=\"sect&#10;ion\"/>", w.toString() );
     }
 
-    private void writeXhtmlHead( XMLWriter writer )
+    private void writeXhtmlHead( XMLWriter writer ) throws IOException
     {
         writer.startElement( HTML.Tag.HEAD.toString() );
         writer.startElement( HTML.Tag.TITLE.toString() );
@@ -162,7 +163,7 @@ public class PrettyPrintXmlWriterTest
         writer.endElement(); // Tag.HEAD
     }
 
-    private void writeXhtmlBody( XMLWriter writer )
+    private void writeXhtmlBody( XMLWriter writer ) throws IOException
     {
         writer.startElement( HTML.Tag.BODY.toString() );
         writer.startElement( HTML.Tag.P.toString() );


Reply via email to