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 );