Holger,
 
so far I wrote the following code. Works pretty fine except that I get an empty file on the servers harddrive :(
Do you have any Idea what I m doing wrong?
Thanks !
 
Regards,
Jan
 
code:
package swl.test.cocoon.serialization;
 
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
 
import org.apache.cocoon.serialization.FOPSerializer;
import org.xml.sax.SAXException;
 
public class Swlfo2pdf extends FOPSerializer {
 
 MyOutputStream output;
 
//--------------------------------------------------------------------------------------------------------  
 public void startDocument() throws SAXException {
  output = new MyOutputStream(output, "c:/temp/myout.pdf");
  super.startDocument();
 }
//--------------------------------------------------------------------------------------------------------
 public void endDocument() throws SAXException {
  super.endDocument();
 }
 
//*********************************************************************************************************
 public static class MyOutputStream extends OutputStream {
 
  private OutputStream origOut; 
  private OutputStream tmpfileOut;  
  
  public MyOutputStream(OutputStream out, String tmp) {
   origOut = out;
   try {
    tmpfileOut = new FileOutputStream(tmp);
   } catch (IOException ex) {
   }
  }
//-------------------------------------------------------------------------------------------------------- 
  public void write(int b) throws IOException {
   try {
    if (tmpfileOut != null)
     tmpfileOut.write(b);
   }
   catch (IOException ex) {
   }
   origOut.write(b);
  }
//-------------------------------------------------------------------------------------------------------- 
  public void write(byte[] b) throws IOException{
   try{
    if (tmpfileOut != null)
     tmpfileOut.write(b);    
   }
   catch (IOException ex){    
   }
   origOut.write(b);
  }
//--------------------------------------------------------------------------------------------------------  
  public void write(byte[] b, int off, int len) throws IOException{
   try{
    if (tmpfileOut != null)
     tmpfileOut.write(b, off, len);    
   }
   catch (IOException ex){    
   }
   origOut.write(b, off, len);   
  }
//--------------------------------------------------------------------------------------------------------  
  public void close() throws IOException {
   try {
    tmpfileOut.close();
   } catch (IOException ex) {
   }
   //origOut.close();
  }
//-------------------------------------------------------------------------------------------------------- 
 }
}


Von: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
Gesendet: Donnerstag, 15. September 2005 13:38
An: [email protected]
Betreff: AW: AW: AW: Antwort: Saving the Outputstream


Jan,

I am sorry I couldn't find the snippet.

> So, how do I tell myoutoutstream that it has an OutputStream with
> the same content as the original OutoutStream but is pointing to a
> completely different filelocation.


You simply make your OutputStream write into 2 streams and replace the original stream with your "double stream", that's why you need to override setOutputStream(). The Serializer should use your custom OutputStreamClass instead of the original.

From the outside it looks like one stream, the inside writes into 2 different streams. I remember I wrote a class which overwrites all of the write() methods of OutputStream

Check this: http://java.sun.com/j2se/1.4.2/docs/api/java/io/OutputStream.html

One example:

class OutOutStream extends FileOutputStream {
        OUtputStream os;

        // Create the "double" outputstream: Constructor is taking the original stream

        public OutOutStream(OutputStream streamone, File outputfile) {
                super(outputfile); // don't know exactly how...
                this.os = streamone;
        }

        // Override all other write() methods like this:
        public void write(byte[] b) {
                os.write(b); // original stream
                this.write(b); // secondary stream
        }

}

---

class yourserializer extends ...Serializer {
        ...
        setOutputStream() {
                // create and use the "double stream"
                output = new OutOutStream(super.output, new File("myoutput.dfile"));
        }

}

Let me know if this works, I haven't tried this.

Regards
Holger

Jan Kohnert <[EMAIL PROTECTED]> schrieb am 15.09.2005 11:05:32:

> Holger,

>  
> thanks for the hint!
> One point that is unclear for me is, how to tell a OutoutStream
> where it is supposed to point on except by using the contructor.

> So, how do I tell myoutoutstream that it has an OutputStream with
> the same content as the original OutoutStream but is pointing to a
> completely different filelocation.

>  
> "I remember I have a kind of CopyStream class somewhere. I'll have a look."
>  
> Would be cool if you finde it!
>  
> Regards,
> Jan
>
> Von: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
> Gesendet: Mittwoch, 14. September 2005 13:52
> An: [email protected]
> Betreff: AW: AW: Antwort: Saving the Outputstream

>
> Jan,
>
> at a first glimpse, your class is not doing anything but creating an
> empty file. There's no link between your OutputStream and the data.
>
> The serializer provides its own output stream (super.output according to this
> http://wiki.apache.org/cocoon/WritingSerializers )
>
> Perhaps you need to replace trhe output stream by a class which
> writes the output to both streams: The web browser and - in addition
> to that - to a file stream.
>
> I think an approach would be:

> 1. try to create an OutputStream class which does the output two 2
> streams (e.g. CopyOutputStream)

> 2. overwrite the setOutputStream() method in the Swlfo2pdf class
> 3. Initialize your OutputStream class using the original output
> stream super.output as seconde output stream target

>
> Anyone here who already did something like that? I remember I have a
> kind of CopyStream class somewhere. I'll have a look.
>
> Regards
> Holger
>
> Jan Kohnert <[EMAIL PROTECTED]> schrieb am 14.09.2005 13:25:55:
>
> > Yes offcause I cant do this :)
> >  
> > But some things have changed. Insted of using a Reader I extandet
> > the fo2pdf Serializer.
> >
> > package swl.test.cocoon.serialization;
> >
> > import java.io.FileNotFoundException;
> > import java.io.FileOutputStream;
> >
> > import org.apache.cocoon.serialization.FOPSerializer;
> > import org.xml.sax.SAXException;
> >
> > public class Swlfo2pdf extends FOPSerializer {
> >    
> >
> >    public void endDocument(){
> >       try {
> >          super.endDocument();
> >          FileOutputStream myout = new FileOutputStream("c:
> /temp/myout.pdf");
> >       } catch (SAXException e) {
> >          // TODO Auto-generated catch block
> >          e.printStackTrace();
> >       } catch (FileNotFoundException e) {
> >          // TODO Auto-generated catch block
> >          e.printStackTrace();
> >       }
> >    }
> > }
> >  
> > The serializer Swlfo2pdf runs great. I m getting the requestet
> > dokument with it, plus an empty file c:/temp/myout.pdf. But offcause
> > this is'nt all I need. Instead of an empty document I want to get a
> > identical copy of the FOPSerializer's output on a servers directory
> > of my choise). But so far I've no Idea how this is suposed to work :(
> >  
> > my xmap:
> > <map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0">
> >     <!-- =========================== components
> > =================================== -->
> >     <map:components>
> >         <map:transformers default="xslt">
> >             <map:transformer name="xslt-saxon" pool-grow="2" pool-
> > max="32" pool-min="8" src="">
> >                 <use-request-parameters>false</use-request-parameters>
> >                 <use-browser-capabilities-db>false</use-browser-
> > capabilities-db>
> >                 <xslt-processor-role>saxon</xslt-processor-role>
> >             </map:transformer>
> >         </map:transformers>
> >         <map:serializers default="html">
> >             <map:serializer name="fo2pdf" src="" mime-type="application/pdf"/>
> >             <map:serializer name="Swlfo2pdf" src="" mime-type="application/pdf"/>
> >         </map:serializers>
> >     </map:components>
> >     <!-- =========================== Views
> > =================================== -->
> >     <map:views>
> >         <map:view name="content" from-label="content">
> >             <map:serialize type="xml"/>
> >         </map:view>
> >         <map:view name="links" from-position="last">
> >             <map:serialize type="links"/>
> >         </map:view>
> >     </map:views>
> >     <map:pipelines>
> >         <!-- =========================== Pipelines
> > ================================= -->
> >         <map:pipeline>
> >             <!-- PDF Pipeline -->
> >             <map:match pattern="*/*/*.pdf">
> >                 <map:generate src=""/>
> >                 <map:transform type="xslt-saxon" src=""/>
> >                 <map:serialize type="Swlfo2pdf"/>
> >             </map:match>
> >         </map:pipeline>
> >     </map:pipelines>
> > </map:sitemap>
> >  
> >  
> > Thanks, Jan
> >  
> >
> > Von: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
> > Gesendet: Mittwoch, 14. September 2005 11:00
> > An: [email protected]
> > Cc: '[email protected]'; users-return-82225-holger.
> > [EMAIL PROTECTED]
> > Betreff: Antwort: Saving the Outputstream
>
> >
> > Hi,
> >
> > Could you provide (copy/paste) the reader source and sitemap.xmap
> > extract which you are using?
> >
> > Seems as if the attachment is broken. I suggest not to attach files
> > to the mailing list.
> >
> > Regards
> > Holger
> >
> > [EMAIL PROTECTED]
> > schrieb am 13.09.2005 16:04:36:
> >
> > > Hello List,
> > >
> > > I m creating PDF Files using cocoons fo2pdf serializer. Everything works
> > > fine. Now I want to save the created pdf file on a servers directory. I
> > > wrote a Reader to get access to the outputstream in order to save it. The
> > > directory name is dependent on the transferred xml files name.
> To to this I
> > > wrote my own Reader. Sadly closely nothing happens when I try to save the
> > > outputstream.
> > >
> > > In Addition my Reader sources and my xconf.
> > >
> > > Can anyone please help me? Thanks!
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > [Anhang "src.rar" gelöscht von Holger Willenborg/Muenster/Armacell]
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to