> From: Lorenzo De Sio [mailto:[EMAIL PROTECTED]]
>
> Hi all,
>
> it seems to me like it is not possible to perform multiple <map:call
> resource="xxx"/> calls in a single matcher.
>
> Fragments from my sitemap:
>
> [...]
>
> <map:resources>
> <map:resource name="aspetto-finale">
> <map:transform src="_xsl/style.xsl">
> <map:parameter name="nome" value="{nome}"/>
> <map:parameter name="cognome" value="{cognome}"/>
> <map:parameter name="doc_name" value="{../1}"/>
> </map:transform>
> <map:serialize/>
> </map:resource>
> <map:resource name="crea-form-dati">
> <map:transform src="_xsl/data0.xsl"/>
> <map:transform src="_xsl/data.xsl"/>
> <map:serialize/>
> </map:resource>
> </map:resources>
>
> [...]
>
> <map:match pattern="data/*">
>
> [...]
>
> <map:call resource="crea-form-dati"/>
BTW, this (second call to resource) will never be executed because of
<map:serialize/> in first call to resource):
> <map:call resource="aspetto-finale"/>
> <map:serialize/>
> </map:act>
> </map:match>
>
> [...]
>
> Both resources work, if used only one at a time. But, as soon as I try
to
> use both of them in a single matcher, I get the following exception:
>
> duplicate definition of variable methodName in method
matchN10092
> [...] duplicate definition of variable argTypes in method matchN10092
[...]
> duplicate definition of variable argValues in method matchN10092 [...]
>
> which is obvious, if we look at the generated sitemap.java:
>
> map = new HashMap(1);
>
> String methodName = "resource_" + substitute(listOfMaps,
> "crea_form_dati");
> listOfMaps.add(map);
> this.dumpParameters(listOfMaps);
> Class[] argTypes = new Class[] {StreamPipeline.class,
> EventPipeline.class, List.class, Environment.class, String.class,
> Boolean.TYPE};
> Object[] argValues = new Object[] {pipeline, eventPipeline,
> listOfMaps, environment, cocoon_view, new Boolean(internalRequest)};
> if (true) return invokeMethod(methodName, argTypes, argValues);
>
> map = new HashMap(1);
>
> String methodName = "resource_" + substitute(listOfMaps,
> "aspetto_finale");
> listOfMaps.add(map);
> this.dumpParameters(listOfMaps);
> Class[] argTypes = new Class[] {StreamPipeline.class,
> EventPipeline.class, List.class, Environment.class, String.class,
> Boolean.TYPE};
> Object[] argValues = new Object[] {pipeline, eventPipeline,
> listOfMaps, environment, cocoon_view, new Boolean(internalRequest)};
> if (true) return invokeMethod(methodName, argTypes, argValues);
>
>
> Any hints? Am I doing wrong in trying to call two resources in a
matcher?
> Are there any correct alternatives?
Congratulations, you found a bug!
Temporary work-around could be:
<map:match pattern="data/*">
<map:match pattern="*">
<map:call resource="crea-form-dati"/>
</map:match>
<map:match pattern="*">
<map:call resource="aspetto-finale"/>
</map:match>
<map:serialize/>
</map:match>
Vadim
>
> Thanks in advance to anyone,
>
> L.
---------------------------------------------------------------------
Please check that your question has not already been answered in the
FAQ before posting. <http://xml.apache.org/cocoon/faq/index.html>
To unsubscribe, e-mail: <[EMAIL PROTECTED]>
For additional commands, e-mail: <[EMAIL PROTECTED]>