You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cocoon.apache.org by ne...@swisslab.de on 2005/09/16 15:43:31 UTC

AW: AW: AW: AW: Antwort: Saving the Outputstream - Solved

Hello Again,

It is possible to save the outputstream. But in a different way I thought.
I found:
http://wiki.apache.org/cocoon/SavingFilesToFileSystem

Thanks Holger & Upayavira 

Regards, Jan

-----Ursprüngliche Nachricht-----
Von: news@swisslab.de [mailto:news@swisslab.de] 
Gesendet: Freitag, 16. September 2005 13:19
An: 'users@cocoon.apache.org'
Betreff: AW: AW: AW: AW: Antwort: Saving the Outputstream

I ll give it a try!
Do you have an example? 

Regards,
Jan 

-----Ursprüngliche Nachricht-----
Von: Upayavira [mailto:uv@odoko.co.uk]
Gesendet: Freitag, 16. September 2005 11:49
An: users@cocoon.apache.org
Betreff: Re: AW: AW: AW: Antwort: Saving the Outputstream

Can't you just use the SourceWritingTransformer in your pipeline, and set
the serializer that it should use? Should be possible without any java
coding.

Upayavira

news@swisslab.de wrote:
> 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:* holger.willenborg@armacell.com 
> [mailto:holger.willenborg@armacell.com]
> *Gesendet:* Donnerstag, 15. September 2005 13:38
> *An:* users@cocoon.apache.org
> *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 <J....@swisslab.de> 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: holger.willenborg@armacell.com 
> [mailto:holger.willenborg@armacell.com]
>  > Gesendet: Mittwoch, 14. September 2005 13:52  > An: 
> users@cocoon.apache.org  > 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 <J....@swisslab.de> 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="org.apache.cocoon.transformation.
>  > TraxTransformer">
>  > >
<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="org.apache.cocoon.
>  > > serialization.FOPSerializer" mime-type="application/pdf"/>
>  > >             <map:serializer name="Swlfo2pdf" src="swl.test.cocoon.
>  > > serialization.Swlfo2pdf" 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="file://c:
>  > > /worknt/hausn/xbefund/xml/{1}/{3}.xml"/>
>  > >                 <map:transform type="xslt-saxon" src="file://c:
>  > > /worknt/hausn/xbefund/stylesheets/{1}/{2}.xsl"/>
>  > >                 <map:serialize type="Swlfo2pdf"/>
>  > >             </map:match>
>  > >         </map:pipeline>
>  > >     </map:pipelines>
>  > > </map:sitemap>
>  > >
>  > >
>  > > Thanks, Jan
>  > >
>  > >
>  > > Von: holger.willenborg@armacell.com 
> [mailto:holger.willenborg@armacell.com]
>  > > Gesendet: Mittwoch, 14. September 2005 11:00  > > An: 
> users@cocoon.apache.org  > > Cc: 'users@cocoon.apache.org'; 
> users-return-82225-holger.
>  > > willenborg=armacell.com@cocoon.apache.org
>  > > 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
>  > >
>  > >
> users-return-82225-holger.willenborg=armacell.com@cocoon.apache.org
>  > > 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: users-unsubscribe@cocoon.apache.org
>  > > > For additional commands, e-mail: users-help@cocoon.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
For additional commands, e-mail: users-help@cocoon.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
For additional commands, e-mail: users-help@cocoon.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
For additional commands, e-mail: users-help@cocoon.apache.org