cocoon-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Hance, Greg (ELS)" <>
Subject RE: Passing a parameter from custome generator to transformer
Date Thu, 11 Nov 2004 16:06:04 GMT

Hi Bent -

One word of caution on the approach you are taking if you plan to turn
caching on at some point. If you pass info. in the request from the
Generator to the Transformer, if the Generator output is cached (in which
case generate() doesn't get invoked) then your request attribute won't get
set and you'll end up w/ a NullPointerException in your transformer.

I tried to do something similiar once and this bug bit me once I deployed w/
caching turned on.

An alternative is to somehow inject the ID needed by the transformer stage
into the XML, maybe create a new top-level container element and pass along
the ID through the XML.

Cheers, Greg

-----Original Message-----
From: Bent André Solheim []
Sent: Thursday, November 11, 2004 9:41 AM
Subject: Re: Passing a parameter from custome generator to transformer

First of all, thank you for your answer Jorg!

I'm having a bit trouble with your suggestion. It appears the
transformer is configured after MyGenerator.compose(ComponentManager),
but before MyGenerator.generate(). It is in generate() I look up the
transformation id and put it in the Request, so when the transformer
is being configured, the parameter is not set, and I get a
FileNotFoundException (Unable to get transformer handler for file...).

I cannot do the lookup in compose, because this is only called on
generator creation. Have I misunderstood something here?

Best regards,

On Thu, 11 Nov 2004 15:30:09 +0100, Jorg Heymans <> wrote:
> you can make your generator set a request attribute, and retrieve it in
> the sitemap via the request-attr module .
> Note that you cannot make the transformer *type* dynamic.
> If you want to execute a different pipeline depending on parameters then
> i think you could selectors for this (i've never used them so i could be
> wrong)
> does this make sense?
> Jorg
> Bent André Solheim wrote:
> > Hi Cocoon users.
> >
> > I'm developing an application where we keep thousands of gzipped xml
> > documents in some 20 different formats in a legacy relational
> > database. These documents can be accessed using a document id. I have
> > written a custom generator that retrieves a gzipped document from the
> > database based on a request parameter, unzips it, and passes sax
> > events on to a transformer. Which transformation the transformer
> > should use was earlier passed as a request parameter along with the
> > document id, but new requirements dictates that only the document id
> > can be passed as parameter. Now I have to look the transformation id
> > up in a database (in the same table as the gzipped xml document).
> >
> > The application will be under heavy load constantly, so I would like
> > to minimize the number of database accesses pr. request. Hence, I
> > would like to look up the gzipped xml data and the transformation id
> > in one query. My question is; is there a way for my custom generator
> > to pass the transformation id to the next transformer in the pipeline
> > (file based)? Or do I need to write my own transformer that looks up
> > the transformation id based on the document id request parameter and
> > figures out what transformation to apply by it self?
> >
> > To summarize; is there a way for my generator to tell the next
> > transformer which transformation to use?
> >
> > Any suggestion would be recieved with great appreciation! :)
> >
> > Best regards
> > Bent André Solheim
> ---------------------------------------------------------------------
> To unsubscribe, e-mail:
> For additional commands, e-mail:

To unsubscribe, e-mail:
For additional commands, e-mail:

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message