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