You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cocoon.apache.org by "Steven Dolg (JIRA)" <ji...@apache.org> on 2009/01/30 21:16:59 UTC

[jira] Updated: (COCOON3-23) StackOverflowError on CachingPipeline.setup(OutputStream)

     [ https://issues.apache.org/jira/browse/COCOON3-23?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Steven Dolg updated COCOON3-23:
-------------------------------

    Attachment: cocoon3-23.patch

This implementation makes no sense of course.

The method is already correctly implemented in the base class AbstractPipeline and actually there is no need to overwrite it.

I provided a patch, that completely removes the method setup(Outputstream) of the CachingPipeline and adds a unit test to check that calling setup(Outputstream) on a CachingPipeline works correctly.

The patch is just for the case that someone wants to apply it locally. I'll commit this change right away.


Thanks for finding this one...

> StackOverflowError on CachingPipeline.setup(OutputStream)
> ---------------------------------------------------------
>
>                 Key: COCOON3-23
>                 URL: https://issues.apache.org/jira/browse/COCOON3-23
>             Project: Cocoon 3
>          Issue Type: Bug
>          Components: cocoon-pipeline
>    Affects Versions: 3.0.0-alpha-1
>            Reporter: Alexander Daniel
>            Assignee: Steven Dolg
>             Fix For: 3.0.0-alpha-2
>
>         Attachments: cocoon3-23.patch
>
>
> CachingPipeline.setup(OutputStream) calls itself resulting in a StackOverflowError [1]. I suppose that it should create a CachingOutputStream first and then call super.setup like setup(OutputStream outputStream, Map<String, Object> parameters) does [2]. [3] is a short code fragment to reproduce.
> [1] 
> @Override
> public void setup(OutputStream outputStream) {
>     this.setup(outputStream);
> }
> [2]
> @Override
> public void setup(OutputStream outputStream, Map<String, Object> parameters) {
>      // create a caching output stream to intercept the result
>      this.cachingOutputStream = new CachingOutputStream(outputStream);
>      super.setup(this.cachingOutputStream, parameters);
> }
> [3]
> Pipeline pipeline = new CachingPipeline();
> pipeline.addComponent(new StringGenerator("<x></x>"));
> pipeline.addComponent(new XMLSerializer());
> ByteArrayOutputStream baos = new ByteArrayOutputStream();
> pipeline.setup(baos);
> pipeline.execute();

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.