El 06/12/2012 20:40, "gelo1234" <[email protected]> escribió: > > > But you should really consider using Transformer as Jaxier suggested. Thats what "filters" XML data in Cocoon so acts as a Filter.
Exactly, recently I have to migrate a Cocoon application to pure java and transformers are just XMLFilters. That's why I suggest this approach. If you can't do it with xslt you can create your own transformer. > If you need to do this in Java (write your own Transformer [Filter]), you can take a look at one of the simplest Transformers > in Cocoon sources: CleaningTransformer > > cocoon-sax/src/main/java/org/apache/cocoon/sax/component/CleaningTransformer.java > > You just consume SAX events and generate new ones :) > > Greetings, > Greg > > > > 2012/12/6 gelo1234 <[email protected]> >> >> >> If you need to do this in generator why not writing your own Generator ? that extends AbstractSAXGenerator ? >> You can find example in: >> cocoon-sample/src/main/java/org/apache/cocoon/sample/generation/ >> >> Greetings, >> Greg >> >> >> 2012/12/6 Mansour Al Akeel <[email protected]> >>> >>> Javier, thank you for replying. >>> For many additional reasons, I need to do this in a generator. It's >>> not my call on this. So I need to connect the XMLFilterImpl to the >>> Generator. >>> I know it can be done, but looking for the simplest and cleanest way. >>> >>> >>> On Thu, Dec 6, 2012 at 12:25 PM, Javier Puerto <[email protected]> wrote: >>> > Hi Mansour, >>> > >>> > 2012/12/6 Mansour Al Akeel <[email protected]> >>> >> >>> >> Hello all, >>> >> I am using C2.2 for this project, and I need to add some functionality >>> >> to the current file generator (ie, logging and warning for broken >>> >> links). I know this can be done in a transformer, >>> >> but since it's required in many places, I want it in the Generator. >>> >> >>> >> >>> >> Since the generator, generates SAX events, the simplest way is to >>> >> insert an XMLFilterImpl that does the logging, between the generator >>> >> and the consumer. For example: >>> > >>> > >>> > I think that use a Transformer is the Cocoon way and simplest (no need of >>> > java code). >>> > >>> > <map:pipeline match="myCustomFileGenerator/**"> >>> > <map:generator src="{1}"/> >>> > <map:transform src="yourXSLT"/> >>> > <mao:serialize/> >>> > </map:pipeline> >>> > >>> > Then you can use from other pipelines in the same sitemap like this: >>> > >>> > <map:pipeline match="my/service"> >>> > <map:generate src="cocoon:/myCustomFileGenerator/your/file/to/consume"/> >>> > .... >>> > >>> > From another block you can consume also with the sevlet: protocol, just add >>> > the name of the block with the service you want to consume: >>> > <map:pipeline match="my/service"> >>> > <map:generate >>> > src="servlet:myBlock:/myCustomFileGenerator/your/file/to/consume"/> >>> > >>> > >>> >> >>> >> Currently: >>> >> >>> >> FileGenerator --> events ---> XMLConsumer >>> >> >>> >> I need it to be: >>> >> >>> >> FileGenerator --> events --> XMLFilterImpl ---> XMLConsumer >>> >> OR >>> >> FileGenerator --> events ---> XMLConsumer --> XMLFilterImpl >>> >> >>> >> The issue is I couldn't find any example on connecting and setting up >>> >> a filter between the generator and the consumer. >>> >> Additionally, setting the contentHandler doesn't seem to have any >>> >> effect. Currently this is what I have and the events are not passing >>> >> through LinkValidator Filter. >>> >> >>> >> >>> >> public class MyGenerator extends FileGenerator { >>> >> >>> >> @Override >>> >> public void setup(SourceResolver resolver, Map objectModel, String >>> >> src, Parameters parameters) throws ProcessingException, SAXException, >>> >> IOException { >>> >> >>> >> super.setup(resolver, objectModel, src, parameters); >>> >> >>> >> LinkValidator validator = new >>> >> LinkValidator(this.contentHandler); >>> >> >>> >> this.setContentHandler(validator); >>> >> >>> >> } >>> >> >>> >> @Override >>> >> public void generate() throws IOException, SAXException, >>> >> ProcessingException { >>> >> super.generate(); >>> >> } >>> >> >>> >> } >>> >> >>> >> >>> >> Thank you >>> > >>> > >>> > If you have implemented the XMLFilter already, you can easily transform into >>> > a Cocoon transformer, the interface is very similar. >>> > >>> > Salu2. >>> > >>> >> >>> >> >>> >> --------------------------------------------------------------------- >>> >> To unsubscribe, e-mail: [email protected] >>> >> For additional commands, e-mail: [email protected] >>> >> >>> > >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: [email protected] >>> For additional commands, e-mail: [email protected] >>> >> >
