Thank you Francesco. That is what I was looking for!! :) So the setup(...) has access to sitemap parameters :) Why not setConfiguration(..) ?
Does call: this.setup((Map<String, Object>) configuration) strips off?/adds? some unwanted/additional data for sitemap-servlet framework ? As i recall setConfiguration is for Java only (without sitemap-servlet) Cocoon use and setup is for standard sitemap-servlet ? Is that correct ? Greetings, Greg 2013/2/11 Francesco Chicchiriccò <ilgro...@apache.org> > On 11/02/2013 13:27, gelo1234 wrote: > > Ohh...ok that clarifies a problem a bit. So if the generator > declaration inside sitemap.xmap does NOT have src=".." attribute i won't > get this piece of code [1] executed: > > if (this.source != null) { > Object attributesObj = configuration.get("attributes"); > if (attributesObj != null && attributesObj instanceof Map) { > ... > } > > > In case of the custom example given before: > > <map:generate type="some-custom"> > ... > </map:generate> > > it does NOT have src attribute (Not every generator got src attribute). > So the question is still valid, how to get to those <map:parameter .../> > values in such case ? Simply by adding useless src="" attribute to > <map:generate ..> e.g. > > <map:generate type="some-custom" src="http://www.w3c.org"> ? > > or through the use of some Helper class? as it is in [2] (to Request > Parameters instead of <map:parameter name="a" > value="jexl:cocoon.request.a"/>) with HttpContextHelper - wonder if there > is any equivalent Helper class for Cocoon Sitemap :) > > > Hi, > [2] injects HTTP request parameters as sitemap parameters: here's why the > usage of HttpContextHelper. > > Let's suppose you want to implement a generator able to deal with: > > <map:generate type="mycustom"> > <map:parameter name="customParam" value="customValue"/> > </map:generate> > > Then you need to > > 1. create class MyCustomGenerator extending AbstractSAXGenerator > > 2. implement setup() and setConfiguration() - an example implementation > could be > > @Override > public void setConfiguration(final Map<String, ? extends Object> > configuration) { > this.setup((Map<String, Object>) configuration); > } > > @Override > public void setup(final Map<String, Object> parameters) { > if (parameters == null) { > return; > } > > // do something with parameters.get("customParam") > } > > 3. add a file > src/main/resources/META-INF/cocoon/spring/my-sitemap-components.xml with > the following content: > > <beans > xmlns="http://www.springframework.org/schema/beans"<http://www.springframework.org/schema/beans> > > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<http://www.w3.org/2001/XMLSchema-instance> > xsi:schemaLocation="http://www.springframework.org/schema/beans > > http://www.springframework.org/schema/beans/spring-beans.xsd"> > > <bean name="generator:mycustom" class="xx.yyy.MyCustomGenerator" > scope="prototype"/> > > </beans> > > HTH > > Regards. > > [1] > https://svn.apache.org/repos/asf/cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/XSLTTransformer.java > [2] > https://svn.apache.org/repos/asf/cocoon/cocoon3/trunk/cocoon-servlet/src/main/java/org/apache/cocoon/servlet/component/RequestParametersGenerator.java > > 2013/2/11 Francesco Chicchiriccò <ilgro...@apache.org> > >> On 11/02/2013 12:07, gelo1234 wrote: >> >>> Question 1: >>> Can we have some example of this one ? >>> >>> <map:generate type="some-custom"> >>> <map:parameter name="a" value="1"/> >>> <map:parameter name="b" value="2"/> >>> </map:generate> >>> >>> I mean, how to get sitemap parameter value from Java Generator code ? >>> btw. Request Parameters are obtained by the use of HttpContextHelper, is >>> this correct ? >>> >> >> No: you can access map:parameter elements from within Java code in the >> same way how this is done in the XSLTTransformer [1]: consider that >> "source" is the only pre-defined parameter you have in any pipeline >> component, mapped to the 'src' XML attribute. >> >> >> Question 2: >>> What is the best (optimal) way to include XML content generated from >>> servlet/controller? >>> >>> <x:include .... src="servlet:/..."/> >>> >>> If the servlet is calling a REST controller there are 2 invocations >>> involved (one to gather data, the other one (with e.g. string-template) to >>> actually serialize the data). Is there any way that REST controller could >>> serialize the data itself ? without invoking another servlet/Page ? >>> >> >> Not that I know: anyway I am using similar includes in different >> production environments with high load and I've experienced no troubles so >> far. >> >> >> Question 3: >>> If the generator is included in some transformer phase (via x:include) >>> does it still have access to original Request Parameters when invoked >>> with: >>> >>> <x:include ... src="servlet:/generate?par1=a&par2=b/> >>> >>> or they are lost (original request params) and substituted by new ones >>> (par1, par2 from the line above)? >>> >> >> They are lost: you need to explicitly pass them though. >> >> Regards. >> >> [1] >> https://svn.apache.org/repos/asf/cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/XSLTTransformer.java >> > -- > Francesco Chicchiriccò > > ASF Member, Apache Syncope PMC chair, Apache Cocoon PMC > Memberhttp://people.apache.org/~ilgrosso/ > >