You are viewing a plain text version of this content. The canonical link for it is here.
Posted to doxia-commits@maven.apache.org by lt...@apache.org on 2010/05/21 10:46:29 UTC

svn commit: r946935 - in /maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src: main/java/org/apache/maven/doxia/module/confluence/ConfluenceParser.java test/java/org/apache/maven/doxia/module/confluence/ConfluenceParserTest.java

Author: ltheussl
Date: Fri May 21 08:46:29 2010
New Revision: 946935

URL: http://svn.apache.org/viewvc?rev=946935&view=rev
Log:
[DOXIA-382] Sink cannot be reused after parsing with ConfluenceParser
Submitted by: Sebastian Annies

Modified:
    maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/ConfluenceParser.java
    maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/java/org/apache/maven/doxia/module/confluence/ConfluenceParserTest.java

Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/ConfluenceParser.java
URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/ConfluenceParser.java?rev=946935&r1=946934&r2=946935&view=diff
==============================================================================
--- maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/ConfluenceParser.java (original)
+++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/ConfluenceParser.java Fri May 21 08:46:29 2010
@@ -109,39 +109,37 @@ public class ConfluenceParser
     public synchronized void parse( Reader source, Sink sink )
         throws ParseException
     {
-        List blocks;
-
         ByLineSource src = new ByLineReaderSource( source );
 
         try
         {
-            blocks = parse( src );
+            List blocks = parse( src );
+
+            sink.head();
+
+            sink.head_();
+
+            sink.body();
+
+            for ( Iterator i = blocks.iterator(); i.hasNext(); )
+            {
+                Block block = (Block) i.next();
+
+                block.traverse( sink );
+            }
+
+            sink.body_();
         }
         catch ( Exception e )
         {
             // TODO handle column number
             throw new ParseException( e, src.getName(), src.getLineNumber(), -1 );
         }
-
-        sink.head();
-
-        sink.head_();
-
-        sink.body();
-
-        for ( Iterator i = blocks.iterator(); i.hasNext(); )
+        finally
         {
-            Block block = (Block) i.next();
-
-            block.traverse( sink );
+            setSecondParsing( false );
+            init();
         }
-
-        sink.body_();
-        sink.flush();
-        sink.close();
-
-        setSecondParsing( false );
-        init();
     }
 
     /** {@inheritDoc} */

Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/java/org/apache/maven/doxia/module/confluence/ConfluenceParserTest.java
URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/java/org/apache/maven/doxia/module/confluence/ConfluenceParserTest.java?rev=946935&r1=946934&r2=946935&view=diff
==============================================================================
--- maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/java/org/apache/maven/doxia/module/confluence/ConfluenceParserTest.java (original)
+++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/java/org/apache/maven/doxia/module/confluence/ConfluenceParserTest.java Fri May 21 08:46:29 2010
@@ -19,6 +19,7 @@ package org.apache.maven.doxia.module.co
  * under the License.
  */
 
+import java.io.FilterWriter;
 import java.io.IOException;
 import java.io.Reader;
 import java.io.StringReader;
@@ -444,6 +445,45 @@ public class ConfluenceParserTest
         assertTrue( "generated document should have a size > 0", output.toString().length() > 0 );
     }
 
+    public void testDoxia382SinkCannotBeReused()
+            throws ParseException
+    {
+        String document1 = "Test A"
+            + "\n\n* list1"
+            + "\n\n* list2"
+            + "\n\n* list2{pre}123{/pre} "
+            + "\n123";
+
+        String document2 = "Test B"
+            + "\n\n* list1"
+            + "\n\n* list2"
+            + "\n\n* list2{pre}123{/pre}"
+            + "\n123";
+
+        output = new StringWriter();
+        Sink sink = new TextSink( new FilterWriter( output )
+        {
+            public void close() throws IOException
+            {
+                super.close();
+                this.out = null;
+            }
+
+            public void write( String str, int off, int len )
+                    throws IOException
+            {
+                if ( out == null )
+                {
+                    throw new IOException( "Writing to an already closed Writer" );
+                }
+            }
+        });
+
+        createParser().parse( new StringReader( document1 ), sink );
+        createParser().parse( new StringReader( document2 ), sink );
+    }
+    
+
     private void assertContainsLines( String message, String result, String lines )
     {
         lines = StringUtils.replace( lines, "\n", EOL );