cocoon-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Francesco Chicchiriccò <ilgro...@apache.org>
Subject Re: A generator with sitemap parameter in C3
Date Mon, 11 Feb 2013 12:41:01 GMT
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"
        xmlns:xsi="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ò <ilgrosso@apache.org 
> <mailto:ilgrosso@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 Member
http://people.apache.org/~ilgrosso/


Mime
View raw message