On 11/02/2013 13:55, gelo1234 wrote:
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 ?

This is correct: I've just reported my own default when I start developing new sitemap components, with purpose of staying as much compatible with sitemap and non-sitemap usage.

Regards.

2013/2/11 Francesco Chicchiriccò <ilgro...@apache.org <mailto: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
    <mailto: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 Member
http://people.apache.org/~ilgrosso/

Reply via email to